From 4dcb12eb4f1394b64407bbe10787630ef92fb204 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Wed, 21 Dec 2022 14:50:58 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9C=BA=E5=99=A8?= =?UTF-8?q?=E4=BA=BAAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yunbao/common/bean/HttpCallbackModel.java | 10 +- .../yunbao/common/bean/LiveAiRobotBean.java | 108 +++++++++++++++ .../com/yunbao/common/http/PDLiveApi.java | 61 ++++++--- .../common/http/live/LiveNetManager.java | 129 +++++++++++++++++- .../LiveRobotSettingDialogFragment.java | 5 - 5 files changed, 287 insertions(+), 26 deletions(-) create mode 100644 common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java 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..d94c60bb0 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java @@ -0,0 +1,108 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; +import com.yunbao.common.bean.BaseModel; + +public class LiveAiRobotBean extends BaseModel { + @SerializedName("ai_name") + private String name; + @SerializedName("ai_state") + private int status; + @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; + } + + public static class Body { + 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 Body() { + } + + 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; + } + } +} 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..1427d6157 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; @@ -354,42 +356,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 +414,7 @@ public interface PDLiveApi { Observable> getAnchorPrankTurntable( @Query("anchor_id") String anchor_id ); + /** * 提交整蛊 */ @@ -418,6 +430,7 @@ public interface PDLiveApi { @Query("turntable_six") String turntable_six, @Query("status") String status ); + /** * 转盘整蛊结束后调用的接口 */ @@ -431,7 +444,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 +456,7 @@ public interface PDLiveApi { @Query("gift_num") String gift_num, @Query("prank_content") String prank_content ); + /** * 删除礼物整蛊 */ @@ -451,58 +465,67 @@ 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( + Observable> setAnchorAiState( @Query("name") String name, @Query("value") String value ); - /** + + /** * 获取机器人自定义话术 - * @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..54ee7fcf6 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; @@ -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,132 @@ public class LiveNetManager { } + public void getAiRobotStatus(HttpCallback callback) { + API.get().pdLiveApi(mContext) + .getAnchorAiState() + .subscribeOn(Schedulers.io()) + .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()) + .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) { + API.get().pdLiveApi(mContext) + .setAnchorAiState(name, value) + .subscribeOn(Schedulers.io()) + .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()) + .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()) + .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()) + .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()) + .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/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java index 13eeae167..5ef74897b 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java @@ -46,11 +46,6 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - Bundle bundle = getArguments(); - if (bundle == null) { - return; - } - } From f690cf0b627b7136eccd7f903ed27b449231e7f2 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Wed, 21 Dec 2022 16:01:59 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E4=BF=AE=E5=A4=8DAPP=E5=88=9A=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E8=BF=98=E6=B2=A1=E7=94=A8=E5=88=9B=E5=BB=BAActivity?= =?UTF-8?q?=E6=97=B6=E5=8F=97=E5=88=B0=E6=8E=A8=E9=80=81=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=B9=B6=E8=AF=95=E5=9B=BE=E5=BC=B9=E5=87=BA=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=AF=B9=E8=AF=9D=E6=A1=86=E6=97=B6=EF=BC=8C?= =?UTF-8?q?context=E4=B8=BA=E7=A9=BA=E5=AF=BC=E8=87=B4=E7=9A=84=E9=97=AA?= =?UTF-8?q?=E9=80=80=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/CustomMessageReceiver.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) 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) { From 7639a70887adf6d4c4f1d7e232182684f0ebc71b Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Thu, 22 Dec 2022 09:58:43 +0800 Subject: [PATCH 03/13] =?UTF-8?q?update=20=E6=9C=BA=E5=99=A8=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FaceUnity/src/main/res/values/strings.xml | 2 +- .../yunbao/common/bean/LiveAiRobotBean.java | 48 +++++++++--- .../com/yunbao/common/http/PDLiveApi.java | 2 +- .../common/http/live/LiveNetManager.java | 4 +- .../LiveRobotSettingDialogFragment.java | 62 +++++++++++++++- .../res/layout/dialog_live_robot_setting.xml | 74 +++++++++++++++++-- .../yunbao/main/views/MainHomeViewHolder.java | 7 ++ 7 files changed, 179 insertions(+), 20 deletions(-) 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/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java index d94c60bb0..44e8b9f95 100644 --- a/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java +++ b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java @@ -1,19 +1,23 @@ package com.yunbao.common.bean; -import com.google.gson.annotations.SerializedName; -import com.yunbao.common.bean.BaseModel; +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; + private int status;//1=开 0=关 @SerializedName("ai_time") private int time; @SerializedName("ai_sayhi") - private int autoSeyHiNumber; + private int autoSeyHiNumber;// 自动打招呼已配置数量 @SerializedName("ai_gz") - private int autoRequestFollowNumber; + private int autoRequestFollowNumber;//自动求关注已配置数量 public LiveAiRobotBean() { } @@ -58,9 +62,24 @@ public class LiveAiRobotBean extends BaseModel { this.autoRequestFollowNumber = autoRequestFollowNumber; } - public static class Body { - public static final int TYPE_SAY_HI=1; - public static final int TYPE_FOLLOW=3; + @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") @@ -70,7 +89,7 @@ public class LiveAiRobotBean extends BaseModel { @SerializedName("content") private String content; - public Body() { + public Message() { } public int getId() { @@ -104,5 +123,16 @@ public class LiveAiRobotBean extends BaseModel { 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/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 1427d6157..576df8487 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -496,7 +496,7 @@ public interface PDLiveApi { * @param type 1(自定义打招呼) 3(自定义求关注) */ @GET("/api/public/?service=Live.getAiAutomaticSpeech") - Observable>> getAiAutomaticSpeech( + Observable>> getAiAutomaticSpeech( @Query("type") String type ); 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 54ee7fcf6..4e6e91a91 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 @@ -22,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; @@ -40,7 +39,6 @@ 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; /** @@ -953,7 +951,7 @@ public class LiveNetManager { }).isDisposed(); } - public void getAiRobotBody(int type, HttpCallback> callback) { + public void getAiRobotBody(int type, HttpCallback> callback) { API.get().pdLiveApi(mContext) .getAiAutomaticSpeech(type + "") .subscribeOn(Schedulers.io()) 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 5ef74897b..6f413f971 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java @@ -2,23 +2,29 @@ package com.yunbao.live.dialog; import android.app.ActionBar; import android.os.Bundle; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; +import com.yunbao.common.bean.LiveAiRobotBean; import com.yunbao.common.dialog.AbsDialogFragment; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.utils.DpUtil; import com.yunbao.live.R; import androidx.annotation.Nullable; +import java.util.List; + /** * 机器人设置 */ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements View.OnClickListener { - + private static String TAG = "AI机器人"; @Override protected int getLayoutId() { @@ -43,10 +49,64 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements params.gravity = Gravity.BOTTOM; window.setAttributes(params); } + @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + initDate(); + } + private void initDate() { + LiveNetManager.get(mContext) + .getAiRobotStatus(new HttpCallback() { + @Override + public void onSuccess(LiveAiRobotBean data) { + Log.i(TAG, "onSuccess: " + data.toString()); + initListType1(); + } + + @Override + public void onError(String error) { + + } + }); + } + + private void initListType1() { + LiveNetManager.get(mContext) + .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()); + } + initListType2(); + } + + @Override + public void onError(String error) { + + } + }); + } + + private void initListType2() { + LiveNetManager.get(mContext) + .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()); + } + } + + @Override + public void onError(String error) { + + } + }); } @Override diff --git a/live/src/main/res/layout/dialog_live_robot_setting.xml b/live/src/main/res/layout/dialog_live_robot_setting.xml index d7ba7721e..8d8001e4a 100644 --- a/live/src/main/res/layout/dialog_live_robot_setting.xml +++ b/live/src/main/res/layout/dialog_live_robot_setting.xml @@ -1,11 +1,75 @@ - + android:layout_height="400dp" + android:background="#000"> + - \ No newline at end of file + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java index 4e4e1eeec..3517a8fbd 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java @@ -7,7 +7,9 @@ import android.widget.ImageView; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.utils.WordUtil; +import com.yunbao.live.dialog.LiveRobotSettingDialogFragment; import com.yunbao.main.R; +import com.yunbao.main.activity.MainActivity; /** * Created by cxf on 2018/9/22. @@ -36,6 +38,11 @@ public class MainHomeViewHolder extends AbsMainHomeParentViewHolder { img_trophy = (ImageView) findViewById(R.id.img_trophy); ImgLoader.display(mContext, "https://downs.yaoulive.com/gif_trophy.gif", img_trophy); + + img_trophy.setOnClickListener(v -> { + LiveRobotSettingDialogFragment fragment=new LiveRobotSettingDialogFragment(); + fragment.show(((MainActivity)mContext).getSupportFragmentManager(),"LiveRobotSettingDialogFragment"); + }); } @Override From e3a9a037bac1ca1493366d8fe16a3743cf1e86c2 Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Fri, 23 Dec 2022 11:16:02 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E7=9B=B4=E6=92=AD=E9=97=B4=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yunbao/common/bean/LiveAiRobotBean.java | 12 +- .../com/yunbao/common/http/PDLiveApi.java | 11 +- .../common/http/live/LiveNetManager.java | 6 +- .../common/views/CustomDrawerPopupView.java | 3 +- .../src/main/res/drawable/bg_robot_shape.xml | 10 + common/src/main/res/drawable/icon_robot.png | Bin 0 -> 3840 bytes .../main/res/layout/custom_drawer_popup.xml | 2 +- .../src/main/res/mipmap-xxhdpi/icon_robot.png | Bin 0 -> 3840 bytes .../src/main/res/mipmap-xxhdpi/icon_tip.png | Bin 0 -> 2865 bytes common/src/main/res/values/strings.xml | 10 + .../LiveRobotSettingDialogFragment.java | 69 ++++-- .../live/views/LiveNewReadyRyViewHolder.java | 29 ++- .../res/layout/dialog_live_robot_setting.xml | 222 ++++++++++++++++-- .../main/res/layout/view_new_live_ready.xml | 20 +- .../yunbao/main/views/MainHomeViewHolder.java | 3 +- 15 files changed, 329 insertions(+), 68 deletions(-) create mode 100644 common/src/main/res/drawable/bg_robot_shape.xml create mode 100644 common/src/main/res/drawable/icon_robot.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_robot.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_tip.png diff --git a/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java index 44e8b9f95..26ba27052 100644 --- a/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java +++ b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java @@ -15,9 +15,9 @@ public class LiveAiRobotBean extends BaseModel { @SerializedName("ai_time") private int time; @SerializedName("ai_sayhi") - private int autoSeyHiNumber;// 自动打招呼已配置数量 + private String autoSeyHiNumber;// 自动打招呼已配置数量 @SerializedName("ai_gz") - private int autoRequestFollowNumber;//自动求关注已配置数量 + private String autoRequestFollowNumber;//自动求关注已配置数量 public LiveAiRobotBean() { } @@ -46,19 +46,19 @@ public class LiveAiRobotBean extends BaseModel { this.time = time; } - public int getAutoSeyHiNumber() { + public String getAutoSeyHiNumber() { return autoSeyHiNumber; } - public void setAutoSeyHiNumber(int autoSeyHiNumber) { + public void setAutoSeyHiNumber(String autoSeyHiNumber) { this.autoSeyHiNumber = autoSeyHiNumber; } - public int getAutoRequestFollowNumber() { + public String getAutoRequestFollowNumber() { return autoRequestFollowNumber; } - public void setAutoRequestFollowNumber(int autoRequestFollowNumber) { + public void setAutoRequestFollowNumber(String autoRequestFollowNumber) { this.autoRequestFollowNumber = autoRequestFollowNumber; } 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 576df8487..91d73d34c 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -20,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; @@ -31,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; @@ -38,6 +39,7 @@ import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; +import retrofit2.http.QueryMap; /** * PDLive网络接口访问 @@ -485,9 +487,8 @@ public interface PDLiveApi { * 修改机器人信息 */ @GET("/api/public/?service=Live.setAnchorAiState") - Observable> setAnchorAiState( - @Query("name") String name, - @Query("value") String value + Observable> setAnchorAiState( + @QueryMap Map map ); /** 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 4e6e91a91..41a7dce15 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 @@ -33,7 +33,9 @@ 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; @@ -934,8 +936,10 @@ public class LiveNetManager { } public void setAiRobotDate(String name, String value, HttpCallback callback) { + Map map = new HashMap<>(); + map.put(name, value); API.get().pdLiveApi(mContext) - .setAnchorAiState(name, value) + .setAnchorAiState(map) .subscribeOn(Schedulers.io()) .subscribe(responseModel -> { if (callback != null) { 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/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 0000000000000000000000000000000000000000..aa0d8b45742845e5feb171de6fdc89c4d01f3184 GIT binary patch literal 3840 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 P00000NkvXXu0mjf`4(B; literal 0 HcmV?d00001 diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 2e408f8e0..aa2b8a418 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -978,4 +978,14 @@ 拒绝 坚持拒绝 随机PK提示 + + 自動發言機器人設置 + 機器人開關 + 機器人名字設置 + 字數限制2-8個字 + 自動打招呼設置 + 已配置條數 + 自動發消息設置 + 前往設置 + 感謝送禮、PK開始、PK結束的自動機器人消息,\n暫不支持自定義。 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 6f413f971..56b118f65 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java @@ -4,19 +4,25 @@ import android.app.ActionBar; import android.os.Bundle; import android.util.Log; import android.view.Gravity; +import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.yunbao.common.bean.HttpCallbackModel; import com.yunbao.common.bean.LiveAiRobotBean; import com.yunbao.common.dialog.AbsDialogFragment; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.http.live.LiveNetManager; -import com.yunbao.common.utils.DpUtil; +import com.yunbao.common.utils.ToastUtil; import com.yunbao.live.R; -import androidx.annotation.Nullable; - import java.util.List; /** @@ -25,6 +31,8 @@ import java.util.List; public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements View.OnClickListener { private static String TAG = "AI机器人"; + private EditText robotNameSetting; + private AppCompatTextView automaticGreetingNumber, automaticMessageNumber; @Override protected int getLayoutId() { @@ -45,7 +53,7 @@ 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); } @@ -53,23 +61,44 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + intiView(); initDate(); } + private void intiView() { + robotNameSetting = (EditText) findViewById(R.id.robot_name_setting); + automaticGreetingNumber = (AppCompatTextView) findViewById(R.id.automatic_greeting_number); + automaticMessageNumber = (AppCompatTextView) findViewById(R.id.automatic_message_number); + robotNameSetting.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE) { + // 修改助手名字 + LiveNetManager.get(mContext) + .setAiRobotDate("ai_name", robotNameSetting.getText().toString(), new HttpCallback() { + @Override + public void onSuccess(HttpCallbackModel data) { + + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + }); + + } + return false; + } + }); + } + private void initDate() { - LiveNetManager.get(mContext) - .getAiRobotStatus(new HttpCallback() { - @Override - public void onSuccess(LiveAiRobotBean data) { - Log.i(TAG, "onSuccess: " + data.toString()); - initListType1(); - } - - @Override - public void onError(String error) { - - } - }); + robotNameSetting.setText(getArguments().getString("Name", "1")); + automaticGreetingNumber.setText(getArguments().getString("AutoSeyHiNumber", "1")); + automaticMessageNumber.setText(getArguments().getString("AutoRequestFollowNumber", "1")); + initListType1(); + initListType2(); } private void initListType1() { @@ -77,11 +106,12 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements .getAiRobotBody(LiveAiRobotBean.Message.TYPE_SAY_HI, new HttpCallback>() { @Override public void onSuccess(List data) { - Log.i(TAG, "onSuccess: " + data.size()); + Log.i(TAG, "onSuccess 自动打招呼 : " + data.size()); for (LiveAiRobotBean.Message message : data) { Log.i(TAG, "onSuccess: message=" + message.toString()); } - initListType2(); + + } @Override @@ -100,6 +130,7 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements for (LiveAiRobotBean.Message message : data) { Log.i(TAG, "onSuccess: message=" + message.toString()); } + } @Override 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..032294d3f 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; @@ -19,11 +18,12 @@ import androidx.core.content.ContextCompat; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; +import com.yunbao.common.bean.LiveAiRobotBean; 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.http.live.LiveNetManager; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.interfaces.ImageResultCallback; import com.yunbao.common.utils.DialogUitl; @@ -35,7 +35,6 @@ import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.AbsViewHolder; 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; @@ -43,6 +42,7 @@ import com.yunbao.live.dialog.LiveFaceUnityDialogFragment; import com.yunbao.live.dialog.LiveNewRoomClassDialogFragment; import com.yunbao.live.dialog.LiveNewRoomTypeDialogFragment; import com.yunbao.live.dialog.LiveNewWishListDialogFragment; +import com.yunbao.live.dialog.LiveRobotSettingDialogFragment; import com.yunbao.live.dialog.LiveTimeDialogFragment; import com.yunbao.live.http.LiveHttpConsts; import com.yunbao.live.http.LiveHttpUtil; @@ -160,6 +160,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 +219,28 @@ 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) { + if (mContext instanceof LiveRyAnchorActivity) { + LiveNetManager.get(mContext) + .getAiRobotStatus(new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveAiRobotBean data) { + Bundle mArguments = new Bundle(); + mArguments.putString("Name", data.getName()); + mArguments.putString("AutoSeyHiNumber", data.getAutoSeyHiNumber()); + mArguments.putString("AutoRequestFollowNumber", data.getAutoRequestFollowNumber()); + LiveRobotSettingDialogFragment fragment = new LiveRobotSettingDialogFragment(); + fragment.setArguments(mArguments); + fragment.show(((LiveRyAnchorActivity) mContext).getSupportFragmentManager(), "LiveRobotSettingDialogFragment"); + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + }); + + } } } diff --git a/live/src/main/res/layout/dialog_live_robot_setting.xml b/live/src/main/res/layout/dialog_live_robot_setting.xml index 8d8001e4a..1f1a2bd77 100644 --- a/live/src/main/res/layout/dialog_live_robot_setting.xml +++ b/live/src/main/res/layout/dialog_live_robot_setting.xml @@ -1,10 +1,10 @@ - + android:layout_height="wrap_content" + android:background="#000" + android:paddingBottom="23dp"> @@ -22,18 +23,19 @@ android:id="@+id/robot_status" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_below="@id/textView6" android:layout_marginTop="18dp" - android:orientation="horizontal" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/textView6"> + android:orientation="horizontal"> - + android:text="@string/robot_switch" + android:textColor="#FFF" + android:textSize="15sp" /> + android:layout_below="@+id/robot_status" + android:layout_marginTop="20dp" + android:orientation="horizontal"> - + android:orientation="vertical"> - + + + + + + + android:imeOptions="actionDone" + android:inputType="text" + android:maxLines="1" + android:textColor="#FFF" + android:textSize="12sp" /> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java index 3517a8fbd..ce721b3f9 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java @@ -40,8 +40,7 @@ public class MainHomeViewHolder extends AbsMainHomeParentViewHolder { ImgLoader.display(mContext, "https://downs.yaoulive.com/gif_trophy.gif", img_trophy); img_trophy.setOnClickListener(v -> { - LiveRobotSettingDialogFragment fragment=new LiveRobotSettingDialogFragment(); - fragment.show(((MainActivity)mContext).getSupportFragmentManager(),"LiveRobotSettingDialogFragment"); + }); } From 1bde99f6c9b49c3e96d19d24b1b54e4d5d247a2c Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Fri, 23 Dec 2022 14:39:24 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8F=91=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/res/values/strings.xml | 5 + .../LiveRobotMessageDialogFragment.java | 37 +++++ .../LiveRobotSettingDialogFragment.java | 11 +- .../main/res/drawable/background_81c16d.xml | 9 ++ .../res/layout/dialog_live_robot_message.xml | 152 ++++++++++++++++++ .../res/layout/dialog_live_robot_setting.xml | 1 + .../src/main/res/mipmap-xxxhdpi/icon_back.png | Bin 0 -> 1167 bytes 7 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 live/src/main/java/com/yunbao/live/dialog/LiveRobotMessageDialogFragment.java create mode 100644 live/src/main/res/drawable/background_81c16d.xml create mode 100644 live/src/main/res/layout/dialog_live_robot_message.xml create mode 100644 live/src/main/res/mipmap-xxxhdpi/icon_back.png diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index aa2b8a418..574f224ef 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -988,4 +988,9 @@ 自動發消息設置 前往設置 感謝送禮、PK開始、PK結束的自動機器人消息,\n暫不支持自定義。 + 添加內容 + 每隔一段時間,機器人自動隨機以下一句話發出。 + 填寫內容推薦,如:求送心願單、加粉絲團等 + 自動發言間隔時間(分鐘) + 最少間隔5分鐘1次 diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveRobotMessageDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LiveRobotMessageDialogFragment.java new file mode 100644 index 000000000..d96823523 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/dialog/LiveRobotMessageDialogFragment.java @@ -0,0 +1,37 @@ +package com.yunbao.live.dialog; + +import android.app.ActionBar; +import android.view.Gravity; +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; + +public class LiveRobotMessageDialogFragment extends AbsDialogFragment { + @Override + protected int getLayoutId() { + return R.layout.dialog_live_robot_message; + } + + + @Override + protected int getDialogStyle() { + return R.style.dialog2; + } + + @Override + protected boolean canCancel() { + return true; + } + + @Override + protected void setWindowAttributes(Window window) { + WindowManager.LayoutParams params = window.getAttributes(); + params.width = ActionBar.LayoutParams.MATCH_PARENT; + params.height = DpUtil.dp2px(400); + params.gravity = Gravity.BOTTOM; + window.setAttributes(params); + } +} 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 56b118f65..193d3315a 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveRobotSettingDialogFragment.java @@ -22,6 +22,7 @@ import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.utils.ToastUtil; import com.yunbao.live.R; +import com.yunbao.live.activity.LiveRyAnchorActivity; import java.util.List; @@ -69,6 +70,7 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements robotNameSetting = (EditText) findViewById(R.id.robot_name_setting); automaticGreetingNumber = (AppCompatTextView) findViewById(R.id.automatic_greeting_number); automaticMessageNumber = (AppCompatTextView) findViewById(R.id.automatic_message_number); + findViewById(R.id.automatic_message_sending).setOnClickListener(this); robotNameSetting.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { @@ -142,7 +144,14 @@ public class LiveRobotSettingDialogFragment extends AbsDialogFragment implements @Override public void onClick(View v) { - dismiss(); + int viewID = v.getId(); + if (viewID == R.id.automatic_message_sending) { + Bundle mArguments = new Bundle(); + LiveRobotMessageDialogFragment fragment = new LiveRobotMessageDialogFragment(); + fragment.setArguments(mArguments); + fragment.show(getChildFragmentManager(), "LiveRobotMessageDialogFragment"); + } + } diff --git a/live/src/main/res/drawable/background_81c16d.xml b/live/src/main/res/drawable/background_81c16d.xml new file mode 100644 index 000000000..c089906d7 --- /dev/null +++ b/live/src/main/res/drawable/background_81c16d.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/dialog_live_robot_message.xml b/live/src/main/res/layout/dialog_live_robot_message.xml new file mode 100644 index 000000000..570cce7b2 --- /dev/null +++ b/live/src/main/res/layout/dialog_live_robot_message.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 1f1a2bd77..43ed93407 100644 --- a/live/src/main/res/layout/dialog_live_robot_setting.xml +++ b/live/src/main/res/layout/dialog_live_robot_setting.xml @@ -204,6 +204,7 @@ Px(Nl8RORCr$Pn@Ou3MHq&kcjtuvK^)L%!~s-9(T%t;xRiiMAPRv*5eG<&MiZlg zkT_)|(Kvz|e}N0yV_f|xr^I<&aLOZ&sWt| z)uOhk1XTGA>Bk9K+kVXT@%+3d%2hN@V@e{CC(km+# zkeOWp>;=w=K=>ZGO464r5>SBiByd^+zMa2EG|K2cAnQ1;M_PR&?zZF0gh{RMxyh#0*CvAQ;cF}<~q4nuGeI9t+q*eysy+Wzh`j8 z%0T&pKaNlve$n3-J+cygv`JikX=&ay>I8Ij+^N(!lhRppYDYwn}OB zV9=_#am&mf|sxB#B@6vbjz|Ux(Moh z0Gg%STS2#v7SW+ae@1pdbL!@!n(I~^q+S5cshcP1#$1OG+9s=SKud)?Rg;R-tye$| z-M0D;Y2v?Hly1EPYUuV5;G2Q5(d|v(rV?};5|Hb57jWAYNIseTxNZGd#C?MSYUs8t z%(`R!aoui^^vNPR+vYO{1=P^Zmp*O*j*oQWjiB3CZ93TXo>Bn$ndiGhO-e!9DCyI# z9bWGJMF0xAIV3+d=KEr?b}Z=j*>XGC<@#a(HFWa@{EZ3SUJJT?)1}kPxwk|>o+K~a zshZ@FT({4c)6urq76+)I+x=k*5bN9fLAUIXiUicq?NMMuLbq3gZr`>|$2|9y4#;)$ z4FG?6B{sVG>jxVoeLYWS+gwvLpoVU~6XK60vF7t6f0@O%lNR2J2h`B*v7p;=6BPU{ zpX(&OzHmAvopPPkIWu$J{1~twB5y+Stt3xSmbLBCB&eaAZ%F!j(o*wP0Y9$y_bkY5 zem^Qe4c)E={B-P5NiVnQ_`LUw641PzTf}u0&j{|jUsJy_13j$!}+002ovPDHLkV1mvZA&CG0 literal 0 HcmV?d00001 From 99938f6ed6b33bc1aae7bff8c3eb0ff9ac69f0d3 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 23 Dec 2022 14:57:59 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=81=8A=E5=A4=A9?= =?UTF-8?q?=E5=AE=A4=E6=B6=88=E6=81=AF=E5=A4=A7=E4=BA=8E99=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E4=BC=9A=E6=B7=B7=E4=B9=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yunbao/live/adapter/LiveChatAdapter.java | 20 ++++++----- .../yunbao/live/views/LiveRoomViewHolder.java | 35 ++++++++++++++++++- 2 files changed, 46 insertions(+), 9 deletions(-) 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..f8f993610 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,22 @@ public class LiveChatAdapter extends RecyclerView.Adapter { @SuppressLint("NotifyDataSetChanged") public void insertItem(LiveChatBean bean) { - if (bean == null) { return; } 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 +408,7 @@ public class LiveChatAdapter extends RecyclerView.Adapter { mPosition = size; } } - if (getItemCount() == 1) { - notifyDataSetChanged(); - } else { - notifyItemInserted(getItemCount()); - } + } @@ -447,6 +450,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/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index e67759a00..8dee9b116 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -16,6 +16,7 @@ import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewOutlineProvider; @@ -157,6 +158,8 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Timer; +import java.util.TimerTask; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -743,7 +746,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis msgNumber = (TextView) findViewById(R.id.room_msg_num); msgUserIcon = (RoundedImageView) findViewById(R.id.room_msg_user_icon); msgLayout = (ConstraintLayout) findViewById(R.id.room_msg_layout); - ViewClicksAntiShake.clicksAntiShake(msg, this::openChatWindow); + // ViewClicksAntiShake.clicksAntiShake(msg, this::openChatWindow); ViewClicksAntiShake.clicksAntiShake(msg2, this::openChatWindow); lt_trickery = (LinearLayout) findViewById(R.id.lt_trickery); @@ -925,6 +928,35 @@ 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, 300); + }else{ + task.cancel(); + task=null; + } + } + }); +*/ findViewById(R.id.btn_votes).setOnClickListener(this); findViewById(R.id.btn_medal_rank).setOnClickListener(this); findViewById(R.id.btn_noble).setOnClickListener(this); @@ -3718,6 +3750,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); From 748814303710a42d1d8afb85ebbbec55eb64699e Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 23 Dec 2022 14:59:05 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=81=8A=E5=A4=A9?= =?UTF-8?q?=E5=AE=A4=E6=B6=88=E6=81=AF=E5=A4=A7=E4=BA=8E99=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E4=BC=9A=E6=B7=B7=E4=B9=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8dee9b116..e7e26e215 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -746,7 +746,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis msgNumber = (TextView) findViewById(R.id.room_msg_num); msgUserIcon = (RoundedImageView) findViewById(R.id.room_msg_user_icon); msgLayout = (ConstraintLayout) findViewById(R.id.room_msg_layout); - // ViewClicksAntiShake.clicksAntiShake(msg, this::openChatWindow); + ViewClicksAntiShake.clicksAntiShake(msg, this::openChatWindow); ViewClicksAntiShake.clicksAntiShake(msg2, this::openChatWindow); lt_trickery = (LinearLayout) findViewById(R.id.lt_trickery); From 9158424a2515d30ab6d249977d24b236ba79742a Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Fri, 23 Dec 2022 18:28:39 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8F=91=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/adapter/RobotMessageAdapter.java | 51 +++++ .../yunbao/common/bean/LiveAiRobotBean.java | 12 +- .../common/event/LiveRobotMessageEvent.java | 16 ++ .../com/yunbao/common/http/PDLiveApi.java | 6 +- .../common/http/live/LiveNetManager.java | 7 + .../yunbao/common/views/InputCustomPopup.java | 92 ++++++++ .../views/LiveRobotMessageCustomPopup.java | 181 ++++++++++++++++ .../views/LiveRobotSettingCustomPopup.java | 196 ++++++++++++++++++ .../common/views/RobotMessageViewHolder.java | 77 +++++++ .../main/res/drawable/background_81c16d.xml | 0 .../src/main/res/drawable/bg_prank_coin.xml | 0 .../res/layout/dialog_live_robot_message.xml | 48 +++-- .../res/layout/dialog_live_robot_setting.xml | 16 +- .../main/res/layout/input_custom_popup.xml | 69 ++++++ .../main/res/layout/view_robot_message.xml | 43 ++++ .../src/main/res/mipmap-xxhdpi/icon_close.png | Bin 0 -> 2524 bytes .../LiveRobotMessageDialogFragment.java | 37 ---- .../LiveRobotSettingDialogFragment.java | 109 +--------- .../live/views/LiveNewReadyRyViewHolder.java | 29 +-- 19 files changed, 797 insertions(+), 192 deletions(-) create mode 100644 common/src/main/java/com/yunbao/common/adapter/RobotMessageAdapter.java create mode 100644 common/src/main/java/com/yunbao/common/event/LiveRobotMessageEvent.java create mode 100644 common/src/main/java/com/yunbao/common/views/InputCustomPopup.java create mode 100644 common/src/main/java/com/yunbao/common/views/LiveRobotMessageCustomPopup.java create mode 100644 common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java create mode 100644 common/src/main/java/com/yunbao/common/views/RobotMessageViewHolder.java rename {live => common}/src/main/res/drawable/background_81c16d.xml (100%) rename {live => common}/src/main/res/drawable/bg_prank_coin.xml (100%) rename {live => common}/src/main/res/layout/dialog_live_robot_message.xml (77%) rename {live => common}/src/main/res/layout/dialog_live_robot_setting.xml (93%) create mode 100644 common/src/main/res/layout/input_custom_popup.xml create mode 100644 common/src/main/res/layout/view_robot_message.xml create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_close.png delete mode 100644 live/src/main/java/com/yunbao/live/dialog/LiveRobotMessageDialogFragment.java 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/bean/LiveAiRobotBean.java b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java index 26ba27052..44e8b9f95 100644 --- a/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java +++ b/common/src/main/java/com/yunbao/common/bean/LiveAiRobotBean.java @@ -15,9 +15,9 @@ public class LiveAiRobotBean extends BaseModel { @SerializedName("ai_time") private int time; @SerializedName("ai_sayhi") - private String autoSeyHiNumber;// 自动打招呼已配置数量 + private int autoSeyHiNumber;// 自动打招呼已配置数量 @SerializedName("ai_gz") - private String autoRequestFollowNumber;//自动求关注已配置数量 + private int autoRequestFollowNumber;//自动求关注已配置数量 public LiveAiRobotBean() { } @@ -46,19 +46,19 @@ public class LiveAiRobotBean extends BaseModel { this.time = time; } - public String getAutoSeyHiNumber() { + public int getAutoSeyHiNumber() { return autoSeyHiNumber; } - public void setAutoSeyHiNumber(String autoSeyHiNumber) { + public void setAutoSeyHiNumber(int autoSeyHiNumber) { this.autoSeyHiNumber = autoSeyHiNumber; } - public String getAutoRequestFollowNumber() { + public int getAutoRequestFollowNumber() { return autoRequestFollowNumber; } - public void setAutoRequestFollowNumber(String autoRequestFollowNumber) { + public void setAutoRequestFollowNumber(int autoRequestFollowNumber) { this.autoRequestFollowNumber = autoRequestFollowNumber; } 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/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 91d73d34c..1edb1f6ca 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -505,7 +505,7 @@ public interface PDLiveApi { * 机器人添加话术 */ @GET("/api/public/?service=Live.addAiAutomaticSpeech") - Observable> addAiAutomaticSpeech( + Observable>> addAiAutomaticSpeech( @Query("type") String type, @Query("content") String content ); @@ -514,7 +514,7 @@ public interface PDLiveApi { * 机器人删除话术 */ @GET("/api/public/?service=Live.delAiAutomaticSpeech ") - Observable> delAiAutomaticSpeech( + Observable>> delAiAutomaticSpeech( @Query("type") String type, @Query("id") String id ); @@ -523,7 +523,7 @@ public interface PDLiveApi { * 机器人修改话术 */ @GET("/api/public/?service=Live.updateAiAutomaticSpeech ") - Observable> 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 41a7dce15..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 @@ -903,6 +903,7 @@ public class LiveNetManager { API.get().pdLiveApi(mContext) .getAnchorAiState() .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(responseModel -> { if (callback != null) { callback.onSuccess(responseModel.getData().getInfo()); @@ -921,6 +922,7 @@ public class LiveNetManager { API.get().pdLiveApi(mContext) .setAnchorAiState(status) .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(responseModel -> { if (callback != null) { callback.onSuccess(null); @@ -941,6 +943,7 @@ public class LiveNetManager { API.get().pdLiveApi(mContext) .setAnchorAiState(map) .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(responseModel -> { if (callback != null) { callback.onSuccess(null); @@ -959,6 +962,7 @@ public class LiveNetManager { API.get().pdLiveApi(mContext) .getAiAutomaticSpeech(type + "") .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(responseModel -> { if (callback != null) { callback.onSuccess(responseModel.getData().getInfo()); @@ -977,6 +981,7 @@ public class LiveNetManager { 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())); @@ -995,6 +1000,7 @@ public class LiveNetManager { 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())); @@ -1013,6 +1019,7 @@ public class LiveNetManager { 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())); 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/LiveRobotSettingCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java new file mode 100644 index 000000000..4b66f3e4e --- /dev/null +++ b/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java @@ -0,0 +1,196 @@ +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.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 = ""; + + 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); + automaticGreetingNumber = findViewById(R.id.automatic_greeting_number); + automaticMessageNumber = findViewById(R.id.automatic_message_number); + findViewById(R.id.automatic_message_sending).setOnClickListener(this); + robotNameText.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); + } + } + + 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()); + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + }); + + initListType1(); + initListType2(); + } + + + private void initListType1() { + 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()); + } + + + } + + @Override + public void onError(String error) { + + } + }); + } + + 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/live/src/main/res/drawable/background_81c16d.xml b/common/src/main/res/drawable/background_81c16d.xml similarity index 100% rename from live/src/main/res/drawable/background_81c16d.xml rename to common/src/main/res/drawable/background_81c16d.xml 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/live/src/main/res/layout/dialog_live_robot_message.xml b/common/src/main/res/layout/dialog_live_robot_message.xml similarity index 77% rename from live/src/main/res/layout/dialog_live_robot_message.xml rename to common/src/main/res/layout/dialog_live_robot_message.xml index 570cce7b2..ef60a75bc 100644 --- a/live/src/main/res/layout/dialog_live_robot_message.xml +++ b/common/src/main/res/layout/dialog_live_robot_message.xml @@ -15,6 +15,7 @@ app:layout_constraintTop_toTopOf="parent"> + - + + + + + diff --git a/live/src/main/res/layout/dialog_live_robot_setting.xml b/common/src/main/res/layout/dialog_live_robot_setting.xml similarity index 93% rename from live/src/main/res/layout/dialog_live_robot_setting.xml rename to common/src/main/res/layout/dialog_live_robot_setting.xml index 43ed93407..56cc25d65 100644 --- a/live/src/main/res/layout/dialog_live_robot_setting.xml +++ b/common/src/main/res/layout/dialog_live_robot_setting.xml @@ -89,8 +89,22 @@ android:inputType="text" android:maxLines="1" android:textColor="#FFF" - android:textSize="12sp" /> + android:textSize="12sp" + android:visibility="gone" /> + 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 0000000000000000000000000000000000000000..7842d906ace66ddc1adb9781ca3ceab5738c4a1a GIT binary patch literal 2524 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 mTq89M97zMij&Cy2GXDojl3i65vPCff0000() { - @Override - public void onSuccess(HttpCallbackModel data) { - - } - - @Override - public void onError(String error) { - ToastUtil.show(error); - } - }); - - } - return false; - } - }); - } - - private void initDate() { - robotNameSetting.setText(getArguments().getString("Name", "1")); - automaticGreetingNumber.setText(getArguments().getString("AutoSeyHiNumber", "1")); - automaticMessageNumber.setText(getArguments().getString("AutoRequestFollowNumber", "1")); - initListType1(); - initListType2(); - } - - private void initListType1() { - LiveNetManager.get(mContext) - .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()); - } - - - } - - @Override - public void onError(String error) { - - } - }); - } - - private void initListType2() { - LiveNetManager.get(mContext) - .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()); - } - - } - - @Override - public void onError(String error) { - - } - }); - } - - @Override - public void onClick(View v) { - int viewID = v.getId(); - if (viewID == R.id.automatic_message_sending) { - Bundle mArguments = new Bundle(); - LiveRobotMessageDialogFragment fragment = new LiveRobotMessageDialogFragment(); - fragment.setArguments(mArguments); - fragment.show(getChildFragmentManager(), "LiveRobotMessageDialogFragment"); - } } 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 032294d3f..57be40428 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveNewReadyRyViewHolder.java @@ -16,14 +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.LiveAiRobotBean; 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.http.live.LiveNetManager; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.interfaces.ImageResultCallback; import com.yunbao.common.utils.DialogUitl; @@ -33,6 +32,7 @@ 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.LiveActivity; @@ -42,7 +42,6 @@ import com.yunbao.live.dialog.LiveFaceUnityDialogFragment; import com.yunbao.live.dialog.LiveNewRoomClassDialogFragment; import com.yunbao.live.dialog.LiveNewRoomTypeDialogFragment; import com.yunbao.live.dialog.LiveNewWishListDialogFragment; -import com.yunbao.live.dialog.LiveRobotSettingDialogFragment; import com.yunbao.live.dialog.LiveTimeDialogFragment; import com.yunbao.live.http.LiveHttpConsts; import com.yunbao.live.http.LiveHttpUtil; @@ -220,27 +219,9 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl RCRTCCameraOutputStream cameraStream = RCRTCEngine.getInstance().getDefaultVideoStream(); cameraStream.setPreviewMirror(!cameraStream.isPreviewMirror()); } else if (i == R.id.btn_robot) { - if (mContext instanceof LiveRyAnchorActivity) { - LiveNetManager.get(mContext) - .getAiRobotStatus(new com.yunbao.common.http.base.HttpCallback() { - @Override - public void onSuccess(LiveAiRobotBean data) { - Bundle mArguments = new Bundle(); - mArguments.putString("Name", data.getName()); - mArguments.putString("AutoSeyHiNumber", data.getAutoSeyHiNumber()); - mArguments.putString("AutoRequestFollowNumber", data.getAutoRequestFollowNumber()); - LiveRobotSettingDialogFragment fragment = new LiveRobotSettingDialogFragment(); - fragment.setArguments(mArguments); - fragment.show(((LiveRyAnchorActivity) mContext).getSupportFragmentManager(), "LiveRobotSettingDialogFragment"); - } - - @Override - public void onError(String error) { - ToastUtil.show(error); - } - }); - - } + new XPopup.Builder(mContext) + .asCustom(new LiveRobotSettingCustomPopup(mContext)) + .show(); } } From a069562bbe044b583a1535cbef5e9584acd0fbea Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Sat, 24 Dec 2022 10:20:51 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8F=91=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/LiveRobotSettingCustomPopup.java | 38 +++++++++++++++++++ .../res/layout/dialog_live_robot_setting.xml | 1 + 2 files changed, 39 insertions(+) diff --git a/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java b/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java index 4b66f3e4e..de72c505c 100644 --- a/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java +++ b/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java @@ -7,6 +7,7 @@ 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; @@ -31,6 +32,9 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View private AppCompatTextView automaticGreetingNumber, automaticMessageNumber; private TextView robotNameText; private String time = ""; + private ImageView robotState; + + private int robotStateInt = 1; public LiveRobotSettingCustomPopup(@NonNull Context context) { super(context); @@ -53,10 +57,13 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View 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); robotNameText.setOnClickListener(this); + robotState.setOnClickListener(this); + robotNameSetting.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { @@ -145,6 +152,33 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View //键盘输入法管理器 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); + } + }); } } @@ -157,6 +191,10 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View 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 diff --git a/common/src/main/res/layout/dialog_live_robot_setting.xml b/common/src/main/res/layout/dialog_live_robot_setting.xml index 56cc25d65..9e4b2e54c 100644 --- a/common/src/main/res/layout/dialog_live_robot_setting.xml +++ b/common/src/main/res/layout/dialog_live_robot_setting.xml @@ -38,6 +38,7 @@ android:textSize="15sp" /> Date: Sat, 24 Dec 2022 11:08:09 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E9=97=B4=E8=81=8A=E5=A4=A9=E5=AE=A4=E5=8A=A8=E7=94=BB=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yunbao/live/adapter/LiveChatAdapter.java | 3 +- .../LiveChatRecyclerViewLayoutManager.java | 40 ++++++++++ .../yunbao/live/views/LiveRoomViewHolder.java | 76 +++++++++++++++---- live/src/main/res/anim/live_chat_msg_in.xml | 16 ++++ 4 files changed, 119 insertions(+), 16 deletions(-) create mode 100644 live/src/main/java/com/yunbao/live/adapter/LiveChatRecyclerViewLayoutManager.java create mode 100644 live/src/main/res/anim/live_chat_msg_in.xml 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 f8f993610..27341f9d0 100644 --- a/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/LiveChatAdapter.java @@ -383,6 +383,7 @@ public class LiveChatAdapter extends RecyclerView.Adapter { if (bean == null) { return; } + // Log.i(TAG, "insertItem: " + bean.getContent()); int size = mList.size(); //设置最大展示99条消息 if (size == 100) { @@ -390,7 +391,7 @@ public class LiveChatAdapter extends RecyclerView.Adapter { notifyItemRangeRemoved(0, 50); } mList.add(bean); - if (getItemCount() == 1 ) { + if (getItemCount() == 1) { notifyDataSetChanged(); } else { notifyItemInserted(getItemCount()); 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/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index e7e26e215..6fa9eaa4a 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -16,7 +16,6 @@ import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewOutlineProvider; @@ -37,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; @@ -116,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; @@ -158,8 +159,6 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Locale; -import java.util.Timer; -import java.util.TimerTask; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -868,11 +867,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() { @@ -928,35 +970,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; + /*//点击侧边消息按钮,自动发消息,测试用的 + 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.setContent("test msg = " + index++); bean.setUserNiceName("auto"); - handler.post(()->mLiveChatAdapter.insertItem(bean)); + 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, 300); - }else{ + if (task == null) { + task = createTask(); + new Timer().schedule(task, 0, 1000); + } else { task.cancel(); - task=null; + 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); 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 From ed6e95f3805538d46b73d2d5124eacafdad8b592 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Sat, 24 Dec 2022 13:41:54 +0800 Subject: [PATCH 11/13] update --- .../src/main/java/com/yunbao/main/views/MainHomeViewHolder.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java index ce721b3f9..2ff16a0d5 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeViewHolder.java @@ -39,9 +39,7 @@ public class MainHomeViewHolder extends AbsMainHomeParentViewHolder { img_trophy = (ImageView) findViewById(R.id.img_trophy); ImgLoader.display(mContext, "https://downs.yaoulive.com/gif_trophy.gif", img_trophy); - img_trophy.setOnClickListener(v -> { - }); } @Override From 404d45893f2a7b0f7462f8862637d150be9bfeb9 Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Sat, 24 Dec 2022 14:23:40 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8F=91=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/adapter/RobotSayHelloAdapter.java | 51 +++++++ .../common/event/LiveRobotSayHelloEvent.java | 16 +++ .../views/LiveRobotSayHelloCustomPopup.java | 128 ++++++++++++++++++ .../views/LiveRobotSettingCustomPopup.java | 71 +++++++--- .../common/views/RobotSayHelloViewHoler.java | 77 +++++++++++ .../layout/dialog_live_robot_say_hello.xml | 106 +++++++++++++++ .../res/layout/dialog_live_robot_setting.xml | 1 + common/src/main/res/values/strings.xml | 2 + 8 files changed, 434 insertions(+), 18 deletions(-) create mode 100644 common/src/main/java/com/yunbao/common/adapter/RobotSayHelloAdapter.java create mode 100644 common/src/main/java/com/yunbao/common/event/LiveRobotSayHelloEvent.java create mode 100644 common/src/main/java/com/yunbao/common/views/LiveRobotSayHelloCustomPopup.java create mode 100644 common/src/main/java/com/yunbao/common/views/RobotSayHelloViewHoler.java create mode 100644 common/src/main/res/layout/dialog_live_robot_say_hello.xml 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/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/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 index de72c505c..f954a8ce7 100644 --- a/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java +++ b/common/src/main/java/com/yunbao/common/views/LiveRobotSettingCustomPopup.java @@ -61,6 +61,7 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View 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); @@ -167,10 +168,10 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View public void onSuccess(HttpCallbackModel data) { if (finalState == 1) { robotState.setImageResource(R.mipmap.special_icon_on); - robotStateInt=1; + robotStateInt = 1; } else { robotState.setImageResource(R.mipmap.special_icon_off); - robotStateInt=0; + robotStateInt = 0; } } @@ -179,6 +180,56 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View 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(); } } @@ -209,23 +260,7 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View private void initListType1() { - 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()); - } - - } - - @Override - public void onError(String error) { - - } - }); } private void initListType2() { 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/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 index 9e4b2e54c..0cedd53b9 100644 --- a/common/src/main/res/layout/dialog_live_robot_setting.xml +++ b/common/src/main/res/layout/dialog_live_robot_setting.xml @@ -158,6 +158,7 @@ 填寫內容推薦,如:求送心願單、加粉絲團等 自動發言間隔時間(分鐘) 最少間隔5分鐘1次 + 當有用戶進入直播間時,機器人會@該用戶並自動 + 隨機以下一句話。最少設置1條,最多20條。 From 874800c19d95dce33db29d91d35bea201eb26275 Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Sat, 24 Dec 2022 14:45:20 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8F=91=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yunbao/common/Constants.java | 1 + .../res/layout/dialog_live_new_function.xml | 22 ++++++++++++++++++ .../mipmap-xxhdpi/live_more_icon_robot.png | Bin 0 -> 24900 bytes common/src/main/res/values/strings.xml | 1 + .../live/activity/LiveRyAnchorActivity.java | 8 ++++++- .../dialog/LiveNewFunctionDialogFragment.java | 4 ++++ 6 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 common/src/main/res/mipmap-xxhdpi/live_more_icon_robot.png 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/res/layout/dialog_live_new_function.xml b/common/src/main/res/layout/dialog_live_new_function.xml index c60106ebf..4182a2fc9 100644 --- a/common/src/main/res/layout/dialog_live_new_function.xml +++ b/common/src/main/res/layout/dialog_live_new_function.xml @@ -95,6 +95,28 @@ android:textSize="12sp" /> + + + + + + + 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 0000000000000000000000000000000000000000..bba2b06628ef01c9a32f6b927554c0792d412465 GIT binary patch literal 24900 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%0D!Uo?Yf=tk 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最少間隔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/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(); } } }