diff --git a/app/src/main/java/com/xscm/midi/RealNameActivity.java b/app/src/main/java/com/xscm/midi/RealNameActivity.java index e25199b..b5985e2 100644 --- a/app/src/main/java/com/xscm/midi/RealNameActivity.java +++ b/app/src/main/java/com/xscm/midi/RealNameActivity.java @@ -113,7 +113,7 @@ public class RealNameActivity extends BaseMvpActivity= Build.VERSION_CODES.M) { + // Android 6.0及以上版本 + android.net.Network network = connectivityManager.getActiveNetwork(); + if (network != null) { + android.net.NetworkCapabilities capabilities = + connectivityManager.getNetworkCapabilities(network); + if (capabilities != null) { + // 检查是否有网络连接并且可以访问互联网 + return capabilities.hasCapability(android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET) && + capabilities.hasCapability(android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED); + } + } + } else { + // Android 6.0以下版本 + android.net.NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + return activeNetworkInfo != null && activeNetworkInfo.isConnected(); + } + } + } catch (Exception e) { + LogUtils.e("Network availability check failed: " + e.getMessage()); + } + + return false; + } + + /** + * 检查网络是否可用(简化版本) + * @return true表示网络可用,false表示网络不可用 + */ + public boolean isNetworkConnected() { + try { + android.net.ConnectivityManager connectivityManager = + (android.net.ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + + if (connectivityManager != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + android.net.Network network = connectivityManager.getActiveNetwork(); + return network != null; + } else { + android.net.NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + return activeNetworkInfo != null && activeNetworkInfo.isConnected(); + } + } + } catch (Exception e) { + LogUtils.e("Network connection check failed: " + e.getMessage()); + } + + return false; + } + /** * 优化内存设置 */ diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/base/RoomManager.java b/moduleUtil/src/main/java/com/xscm/moduleutil/base/RoomManager.java index f39a41f..79559a8 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/base/RoomManager.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/base/RoomManager.java @@ -110,7 +110,10 @@ public class RoomManager { public void fetchRoomDataAndEnter(Context context, String roomId, String password) { // 显示加载提示 // 这里可以根据需要添加加载对话框 - + if (CommonAppContext.getInstance().isRoomJoininj){ + return; + } + CommonAppContext.getInstance().isRoomJoininj=true; // 检查是否有有效的缓存数据 // RoomInfoResp roomInfo = getCachedRoomData(roomId); // 检查是否是当前房间且用户在线 @@ -119,6 +122,7 @@ public class RoomManager { fetchAndJoinRoom(context, roomId, password); } else { if (!CommonAppContext.getInstance().playId.equals(roomId)) { + MessageListenerSingleton.getInstance().joinGroup(roomId); exitRoom(CommonAppContext.getInstance().playId); } else if (CommonAppContext.getInstance().lable_id.equals("6")) { upInfo(context, roomId, password, true, null, true); @@ -241,7 +245,7 @@ public class RoomManager { */ private void fetchAndJoinRoom(Context context, String roomId, String password) { // 获取房间数据 - MessageListenerSingleton.getInstance().joinGroup(roomId); + // 等待一段时间确保退出完成 try { Thread.sleep(300); @@ -394,11 +398,11 @@ public class RoomManager { // 可以通过检查Agora是否还在房间中,或者通过服务端接口查询用户状态等方式实现 // 目前返回false,需要根据实际需求实现具体逻辑 // boolean isCurrentRoom=isCurrentRoom(roomId); - try { - Thread.sleep(300); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } +// try { +// Thread.sleep(300); +// } catch (InterruptedException e) { +// Thread.currentThread().interrupt(); +// } final boolean[] isOnline = {false}; RetrofitClient.getInstance().getRoomOnline(roomId, "1", "50", new BaseObserver() { @Override diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/BindDetail.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/BindDetail.java new file mode 100644 index 0000000..5810b82 --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/BindDetail.java @@ -0,0 +1,22 @@ +package com.xscm.moduleutil.bean; + +import lombok.Data; +/** + *@author qx + *@data 2025/9/25 + *@description: 绑定详情 + */ +@Data +public class BindDetail { + + private String id; + private String alipay_name;//支付宝姓名 + private String alipay_account;//支付宝账户 + + private String bank_card_number;//银行卡号 + + private String bank_user_name;//姓名 + private String bank_card;//所属行 + private String open_bank;//开户行 + +} diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/blindboxwheel/BlindBoxBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/blindboxwheel/BlindBoxBean.java index 0a25fe9..bd42255 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/blindboxwheel/BlindBoxBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/blindboxwheel/BlindBoxBean.java @@ -26,6 +26,7 @@ public class BlindBoxBean { private int is_xlh; ///是否开启巡乐会 0 关闭 1 开启 private Object xlh_data; private List gift_list; + private String end_time;//巡乐会结束时间 private GiveGift give_homeowner_gift;//房主礼物 private GiveGift locking_gift;//锁定礼物 @@ -95,6 +96,14 @@ public class BlindBoxBean { } } } + Object endTime = map.get("end_time"); + if (endTime != null) { + if (endTime instanceof String){ + xlhData.setEnd_time(endTime.toString()); + }else { + xlhData.setEnd_time(endTime.toString()); + } + } return xlhData; } @@ -118,6 +127,9 @@ public class BlindBoxBean { if (jsonObject.has("status")) { xlhData.setStatus(jsonObject.get("status").getAsInt()); } + if (jsonObject.has("end_time")){ + xlhData.setEnd_time(jsonObject.get("end_time").getAsString()); + } return xlhData; } @@ -130,6 +142,7 @@ public class BlindBoxBean { private String start_num;//巡乐会开启需要达到的次数 private int current_num;//当前已抽奖次数 private int status; + private String end_time; } @Data public static class GiveGift { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java index 518f477..f9bb504 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java @@ -29,6 +29,7 @@ public class RoomInfoResp implements Serializable { private PkRoomInfo pk_info; private List song_pit_list; private FriendInfo friend_info; + private GiftXlh gift_cycle; //弹出麦位操作弹出 @@ -114,4 +115,18 @@ public class RoomInfoResp implements Serializable { public boolean isFreedomMode() { return "1".equals(room_info.getWheat()); } + + @Data + public class GiftXlh implements Serializable{ + private XlhInfo xlh_info ; + } +@Data + public class XlhInfo implements Serializable{ + private String activities_name; + private String icon; + + private String xlh_status; + + private String end_time; + } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java b/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java index 69492b5..c532ee4 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java @@ -453,17 +453,17 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment 0 && box_price > 0) { if (type == 10) { - updateBackground(mBinding.mirroeSky.llOne, icon > box_price, drawableX, drawableW); - updateBackground(mBinding.mirroeSky.llTen, icon > box_price * 6, drawableX, drawableW); - updateBackground(mBinding.mirroeSky.llHundred, icon > box_price * 9, drawableX, drawableW); + updateBackground(mBinding.mirroeSky.llOne, icon >= box_price, drawableX, drawableW); + updateBackground(mBinding.mirroeSky.llTen, icon >= box_price * 6, drawableX, drawableW); + updateBackground(mBinding.mirroeSky.llHundred, icon >= box_price * 9, drawableX, drawableW); } else if (type == 11) { - updateBackground(mBinding.cityTime.llOne, icon > box_price, drawableX, drawableW); - updateBackground(mBinding.cityTime.llTen, icon > box_price * 6, drawableX, drawableW); + updateBackground(mBinding.cityTime.llOne, icon >= box_price, drawableX, drawableW); + updateBackground(mBinding.cityTime.llTen, icon >= box_price * 6, drawableX, drawableW); updateBackground(mBinding.cityTime.llHundred, icon > box_price * 9, drawableX, drawableW); } else if (type == 12) { - updateBackground(mBinding.pinnacleTime.llOne, icon > box_price, drawableX, drawableW); - updateBackground(mBinding.pinnacleTime.llTen, icon > box_price * 6, drawableX, drawableW); - updateBackground(mBinding.pinnacleTime.llHundred, icon > box_price * 9, drawableX, drawableW); + updateBackground(mBinding.pinnacleTime.llOne, icon >= box_price, drawableX, drawableW); + updateBackground(mBinding.pinnacleTime.llTen, icon >= box_price * 6, drawableX, drawableW); + updateBackground(mBinding.pinnacleTime.llHundred, icon >= box_price * 9, drawableX, drawableW); } else { // 兜底处理:未知 type 时全部设为不可点击 + 默认背景 setAllBackgroundToDefault(drawableW); diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java b/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java index 0dba532..80c0c4a 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java @@ -5,6 +5,7 @@ import com.xscm.moduleutil.bean.AlbumBean; import com.xscm.moduleutil.bean.AppPay; import com.xscm.moduleutil.bean.AppUpdateModel; import com.xscm.moduleutil.bean.BannerModel; +import com.xscm.moduleutil.bean.BindDetail; import com.xscm.moduleutil.bean.BindType; import com.xscm.moduleutil.bean.BlackUserBean; import com.xscm.moduleutil.bean.CharmRankingResp; @@ -165,9 +166,13 @@ public interface ApiServer { @GET(Constants.GET_WITHDRAWAL_LIST) Observable>> withdrawalList(@Query("page") String page, @Query("page_limit") String page_limit, @Query("search_stime") String search_stime, @Query("search_etime") String search_etime); + @FormUrlEncoded + @POST(Constants.POST_BIND_DETAIL) + Call> bindDetai(@Field("user_id") String user_id, @Field("type") String type); + @FormUrlEncoded @POST(Constants.POST_MESSAGE_LIST) - Observable>> getMessagetitle(@Field("type") String type, @Field("page") String page, @Field("page_limit") String page_limit); + Call>> getMessagetitle(@Field("type") String type, @Field("page") String page, @Field("page_limit") String page_limit); @FormUrlEncoded @POST(Constants.POST_ROOM_RANK) diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java b/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java index e9aa99f..45b8c0f 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java @@ -19,6 +19,7 @@ import com.xscm.moduleutil.bean.AlbumBean; import com.xscm.moduleutil.bean.AppPay; import com.xscm.moduleutil.bean.AppUpdateModel; import com.xscm.moduleutil.bean.BannerModel; +import com.xscm.moduleutil.bean.BindDetail; import com.xscm.moduleutil.bean.BindType; import com.xscm.moduleutil.bean.BlackUserBean; import com.xscm.moduleutil.bean.CharmRankingResp; @@ -450,13 +451,51 @@ public class RetrofitClient { } public void getMessagetitle(String type, String page, String page_limit, BaseObserver> observer) { - sApiServer.getMessagetitle(type, page, page_limit).compose(new DefaultTransformer<>()).subscribe(observer); + sApiServer.getMessagetitle(type, page, page_limit).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if (response.code() == 200){ + BaseModel> baseModel = response.body(); + if (baseModel.getCode()==1){ + observer.onNext(baseModel.getData()); + }else { + ToastUtils.showShort(baseModel.getMsg()); + } + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + + } + }); } public void withdrawalList(String page, String page_limit, String search_stime, String search_etime, BaseObserver> observer) { sApiServer.withdrawalList(page, page_limit, search_stime, search_etime).compose(new DefaultTransformer<>()).subscribe(observer); } + public void bindDetai(String userId, String type,BaseObserver observer){ + sApiServer.bindDetai(userId, type).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.code() == 200){ + BaseModel baseModel = response.body(); + if (baseModel.getCode()==1){ + observer.onNext(baseModel.getData()); + }else { + observer.onNext(null); + } + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + t.printStackTrace(); + } + }); + } + public void getRoomRank(String roomId, String type, String time_type, String page, String page_limit, BaseObserver> observer) { // sApiServer.getRoomRank(roomId, type, time_type, page, page_limit).compose(new DefaultTransformer<>()).subscribe(observer); sApiServer.getRoomRank(roomId, type, time_type, page, page_limit).enqueue(new Callback>>() { @@ -1067,6 +1106,8 @@ public class RetrofitClient { BaseModel> baseModel = response.body(); if (baseModel.getCode() == 1) { observer.onNext(baseModel.getData()); + }else { + ToastUtils.showShort(baseModel.getMsg()); } } } @@ -1086,6 +1127,8 @@ public class RetrofitClient { BaseModel> baseModel = response.body(); if (baseModel.getCode() == 1) { observer.onNext(baseModel.getData()); + }else { + ToastUtils.showShort(baseModel.getMsg()); } } } @@ -1105,6 +1148,8 @@ public class RetrofitClient { BaseModel> baseModel = response.body(); if (baseModel.getCode() == 1) { observer.onNext(baseModel.getData()); + }else { + ToastUtils.showShort(baseModel.getMsg()); } } } @@ -1124,6 +1169,8 @@ public class RetrofitClient { BaseModel> baseModel = response.body(); if (baseModel.getCode() == 1) { observer.onNext(baseModel.getData()); + }else { + ToastUtils.showShort(baseModel.getMsg()); } } } @@ -1700,12 +1747,12 @@ public class RetrofitClient { }); } - public void roomGetIn(String roomId, String - password, BaseObserver observer) { + public void roomGetIn(String roomId, String password, BaseObserver observer) { sApiServer.roomGetIn(roomId, password).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { + CommonAppContext.getInstance().isRoomJoininj=false; if (response.code() == 200) { BaseModel roomInfoRespBaseModel = response.body(); if (roomInfoRespBaseModel.getCode() == 1) { @@ -1718,7 +1765,8 @@ public class RetrofitClient { @Override public void onFailure(Call> call, Throwable t) { - + MessageListenerSingleton.getInstance().quitGroup(roomId); + CommonAppContext.getInstance().isRoomJoininj=false; } }); } @@ -1846,8 +1894,7 @@ public class RetrofitClient { }); } - public void appPay(String user_id, String money, String coin, String - type, BaseObserver observer) { + public void appPay(String user_id, String money, String coin, String type, BaseObserver observer) { sApiServer.appPay(user_id, money, coin, type).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { @@ -1855,6 +1902,8 @@ public class RetrofitClient { BaseModel appPayBaseModel = response.body(); if (appPayBaseModel.getCode() == 1) { observer.onNext(appPayBaseModel.getData()); + }else { + ToastUtils.showShort(appPayBaseModel.getMsg()); } } } @@ -1904,8 +1953,7 @@ public class RetrofitClient { }); } - public void bind(String userId, String type, String alipayAccount, String - bank_card_number, String bank_card, String open_bank, BaseObserver observer) { + public void bind(String userId, String type, String alipayAccount, String bank_card_number, String bank_card, String open_bank, BaseObserver observer) { sApiServer.bind(userId, type, alipayAccount, bank_card_number, bank_card, open_bank).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { @@ -3128,8 +3176,7 @@ public class RetrofitClient { }); } - public void userOnlineStatus(String user_id, String - roomId, BaseObserver> observer) { + public void userOnlineStatus(String user_id, String roomId, BaseObserver> observer) { sApiServer.userOnlineStatus(user_id, roomId).enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/CrashHandler.java b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/CrashHandler.java new file mode 100644 index 0000000..98b608d --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/CrashHandler.java @@ -0,0 +1,41 @@ +package com.xscm.moduleutil.utils; + +import android.content.Context; +import android.util.Log; + +import com.alibaba.android.arouter.launcher.ARouter; + +public class CrashHandler implements Thread.UncaughtExceptionHandler { + private static CrashHandler instance; + private Thread.UncaughtExceptionHandler defaultHandler; + + private CrashHandler(Context context) { + defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); + } + + public static void init(Context context) { + if (instance == null) { + instance = new CrashHandler(context); + Thread.setDefaultUncaughtExceptionHandler(instance); + } + } + + @Override + public void uncaughtException(Thread t, Throwable e) { + // 记录崩溃日志 + Log.e("CrashHandler", "未捕获异常: " + e.getMessage()); + // 简单处理空指针 + if (e instanceof NullPointerException) { + // 重启应用或跳转错误页 + restartApp(); + } else { + // 交给系统默认处理 + defaultHandler.uncaughtException(t, e); + } + } + + private void restartApp() { + // 实现应用重启逻辑 + ARouter.getInstance().build(ARouteConstants.ME).navigation(); + } +} diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentEnum.java b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentEnum.java index cf08e3d..047f959 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentEnum.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentEnum.java @@ -15,20 +15,20 @@ public enum EnvironmentEnum { "tcp://81.70.45.221", "https://md.xscmmidi.site/h5"), TEST(//测试环境 - "http://md.qxmier.com/", + "http://tmd.xscmmidi.site/", "6rdWuz058oq5OahdbFiGEybUcdahd12J83L34Uc7MrPIrxtFG+rXiwDvRcqNvjwbClbbmvMrmxKVkIysFByBsl0Qe9kqd2w8T/nhK5G6eXXlk2V9AjYCieIU+jRnjZBB+Cfechr6rCGJ2aeBARIsXcRPW7wm9WFK9euh5T+v6Pyte68yNaNdcYCll3+U4/uCEog7HygCnMIbAU+kqoPdmn2H+51YOHW+VsnsHd4w1+I3f8Tt0xLIXGM4GWnQueZ5GR46GTWiSYMy8dCIh9SPIMRyC91GosVcfGPMJSdcXqc=", - "https://oss-cn-hangzhou.aliyuncs.com/", - "LTAI5tJ2UYfFNF7K3F4e1siv", - "DhpCS82gaigZljYqsWsUWUAZ20dREz", - "qx-yusheng", - "https://qx-yusheng.oss-cn-hangzhou.aliyuncs.com/", + "https://oss-cn-beijing.aliyuncs.com/", + "LTAI5tKgrfcFQxH46ZwWYgFW", + "ZOjTqAJmUL563EKFKySrUwAHtx4hKt", + "midi01", + "https://midi01.oss-cn-beijing.aliyuncs.com/", "wxc7681513be9f926b", - 1600101474, + 1600106397, "05b406b4541e413887d8d2bf9be8642c", - "tcp://47.120.21.132", + "tcp://1.13.181.248", "https://chatvespa.qxmier.com"); - private final String serverUrl; + private final String serverUrl;//服务器地址 private final String ALI_AUTH_KEY;//阿里云授权key private final String ossEndPoint; @@ -37,15 +37,15 @@ public enum EnvironmentEnum { private final String ossBucketName; private final String ossBaseUrl; - private final String wxAppId; + private final String wxAppId;//微信appId private final int sdkAppId;//腾讯云sdkAppId im - private final String swSdkAppId; + private final String swSdkAppId;//声网sdkAppId - private final String mqttUrl; + private final String mqttUrl;//MQTT服务器地址 - private final String H5Url; + private final String H5Url;//h5地址 EnvironmentEnum(String serverUrl, String ALI_AUTH_KEY, String ossEndPoint, String ossaAcessKeyId, String ossAccessKeySecret, String ossBucketName, String ossBaseUrl, String wxAppId, diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java index 4e232b9..43c35bc 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java @@ -27,11 +27,11 @@ public class EnvironmentPrefs { // 获取当前选择的环境,默认为 PRODUCTION public EnvironmentEnum getSelectedEnvironment() { - String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.PRODUCTION.name()); + String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.TEST.name()); try { return EnvironmentEnum.valueOf(envName); } catch (IllegalArgumentException e) { - return EnvironmentEnum.PRODUCTION; // 出错时默认返回生产环境 + return EnvironmentEnum.TEST; // 出错时默认返回生产环境 } } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/ClearEditText.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/ClearEditText.java index 48e64d5..28aa0e0 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/ClearEditText.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/ClearEditText.java @@ -45,7 +45,7 @@ public class ClearEditText extends AppCompatEditText implements View.OnFocusChan //获取EditText的DrawableRight,假如没有设置我们就使用默认的图片 mClearDrawable = getCompoundDrawables()[2]; if (mClearDrawable == null) { - mClearDrawable = getResources().getDrawable(R.mipmap.common_et_clear_icon); + mClearDrawable = getResources().getDrawable(R.mipmap.index_icon_close); } mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight()); diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java index cb7f938..d07654b 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java @@ -356,6 +356,7 @@ public class Constants { public static final String GET_APP_UPDATE = "/api/Version/get_app_version";//版本更新 public static final String POST_CLEAR_USER_CHARM = "/api/Room/clear_user_charm";//清除魅力值 public static final String POST_MESSAGE_LIST = "/api/UserMessage/get_user_message_list";//消息列表 + public static final String POST_BIND_DETAIL = "/api/Bind/bind_detail";//绑定详情 public static final String POST_USER_WALL = "/api/User/user_gift_wall";//礼物墙 public static final String POST_USER_OLINE_STATUS = "/api/Room/user_online_status";//用户在线状态 public static final String DELETE_ROOM_HISTORY = "/api/Room/delete_room_history";//删除历史足迹 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/DropViewRoom.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/DropViewRoom.java new file mode 100644 index 0000000..2dd470b --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/DropViewRoom.java @@ -0,0 +1,184 @@ +package com.xscm.moduleutil.widget; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewAnimationUtils; +import android.widget.LinearLayout; + +import com.blankj.utilcode.util.ScreenUtils; + +public class DropViewRoom extends LinearLayout { + + private int rightMargin = 0; + private float lastX, lastY; + private int screenWidth; + + public DropViewRoom(Context context) { + super(context); + init(); + } + + public DropViewRoom(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public DropViewRoom(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + + void init() { + + post(new Runnable() { + @Override + public void run() { + //设置初始位置 + int sh = ScreenUtils.getScreenHeight(); + int sw = ScreenUtils.getScreenWidth()-100; +// setBackgroundResource(R.drawable.bg_home_drop_view); + int y = (int) (0.5f * sh) - getHeight(); + int x = sw - getWidth(); + setTranslationX(x); + setTranslationY(y); + } + }); + } + + + boolean starDrap = false; + float X1; + float X2; + float Y1; + float Y2; + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (starDrap) return true; + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + X1 = event.getX(); + Y1 = event.getY(); + break; + + case MotionEvent.ACTION_MOVE: + X2 = event.getX();//当手指抬起时,再次获取屏幕位置的X值 + Y2 = event.getY();//同理 + Action(X1, X2, Y1, Y2); + break; + + + } + return starDrap; + } + + String TAG = "DropView"; + + public boolean Action(float X1, float X2, float Y1, float Y2) { + float ComparedX = X2 - X1;//第二次的X坐标的位置减去第一次X坐标的位置,代表X坐标上的变化情况 + float ComparedY = Y2 - Y1;//同理 + //当X坐标的变化量的绝对值大于Y坐标的变化量的绝对值,以X坐标的变化情况作为判断依据 + //上下左右的判断,都在一条直线上,但手指的操作不可能划直线,所有选择变化量大的方向上的量 + //作为判断依据 + if (Math.abs(ComparedX) > 30 || Math.abs(ComparedY) > 30) { + Log.i(TAG, "Action: 拖动"); + starDrap = true; +// setBackgroundResource(R.drawable.bg_home_drop_view); + return true; + } else { + starDrap = false; + return false; + } + } + + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + + case MotionEvent.ACTION_MOVE: +// setBackgroundResource(R.drawable.bg_home_drop_view); + setTranslationX(getX() + (event.getX() - X1)); + setTranslationY(getY() + (event.getY() - Y1)); + X2 = event.getX(); + break; + case MotionEvent.ACTION_UP: + starDrap = false; + int sw = ScreenUtils.getScreenWidth(); + Log.i(TAG, "onTouchEvent: " + sw + "," + X2); + boolean isR = getTranslationX() + getWidth() / 2 >= sw / 2;//贴边方向 + ObjectAnimator anim = ObjectAnimator.ofFloat(this, "translationX", isR ? sw - getWidth()+10 : 0f).setDuration(200); + anim.start(); + + break; + + } + + return true; + } + + + public void doRevealAnimation(View mPuppet, boolean flag) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + int[] vLocation = new int[2]; + getLocationInWindow(vLocation); + int centerX = vLocation[0] + getMeasuredWidth() / 2; + int centerY = vLocation[1] + getMeasuredHeight() / 2; + + int height = ScreenUtils.getScreenHeight(); + int width = ScreenUtils.getScreenWidth(); + int maxRradius = (int) Math.hypot(height, width); + Log.e("hei", maxRradius + ""); + + if (flag) { + mPuppet.setVisibility(VISIBLE); + Animator animator = ViewAnimationUtils.createCircularReveal(mPuppet, centerX, centerY, maxRradius, 0); + animator.setDuration(600); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + mPuppet.setVisibility(View.GONE); + } + }); + animator.start(); + flag = false; + } else { + Animator animator = ViewAnimationUtils.createCircularReveal(mPuppet, centerX, centerY, 0, maxRradius); + animator.setDuration(1000); + animator.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + mPuppet.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationEnd(Animator animation) { + } + + @Override + public void onAnimationCancel(Animator animation) { + + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }); + animator.start(); + flag = true; + } + } + } + + +} diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomMessageInputMenu.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomMessageInputMenu.java index 202de28..70b6bba 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomMessageInputMenu.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/RoomMessageInputMenu.java @@ -59,7 +59,7 @@ public class RoomMessageInputMenu extends ConstraintLayout { } String text = etContent.getText().toString(); if (TextUtils.isEmpty(text)) { - ToastUtils.show("请输入评论内容"); + ToastUtils.show("请输入内容"); return; } // ApiClient.getInstance().sendTxtFilter(text,new BaseObserver() { diff --git a/moduleUtil/src/main/res/layout/index_dialog_youth_model.xml b/moduleUtil/src/main/res/layout/index_dialog_youth_model.xml index 738b7f8..231d3e6 100644 --- a/moduleUtil/src/main/res/layout/index_dialog_youth_model.xml +++ b/moduleUtil/src/main/res/layout/index_dialog_youth_model.xml @@ -97,8 +97,8 @@ diff --git a/moduleroom/src/main/AndroidManifest.xml b/moduleroom/src/main/AndroidManifest.xml index 29903bd..883527f 100644 --- a/moduleroom/src/main/AndroidManifest.xml +++ b/moduleroom/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -16,14 +17,13 @@ android:name=".activity.RoomActivity" android:screenOrientation="portrait" android:launchMode="singleTask" - android:taskAffinity=".RoomTaskAffinity" android:excludeFromRecents="true" android:exported="true" android:windowSoftInputMode="adjustPan" android:enableOnBackInvokedCallback="false" android:theme="@style/TransparentActivityTheme" android:configChanges="orientation|screenSize|keyboardHidden" - /> + tools:targetApi="tiramisu" /> diff --git a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java index 59016c9..0641a09 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java +++ b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java @@ -51,6 +51,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; @@ -81,6 +82,7 @@ import com.example.moduleroom.fragment.PublicScreenEaseChatFragment; import com.example.moduleroom.fragment.RoomCabinFragment; import com.example.moduleroom.fragment.RoomChartsFragment; import com.example.moduleroom.fragment.RoomNoticeDialogFragment; +import com.orhanobut.logger.Logger; import com.petterp.floatingx.assist.helper.FxScopeHelper; import com.petterp.floatingx.listener.control.IFxControl; import com.tencent.imsdk.v2.V2TIMValueCallback; @@ -517,7 +519,7 @@ public class RoomActivity extends BaseMvpActivity pitMap = new HashMap<>(); public void handleMsgType1039(RoomMessageEvent messageEvent, RoomMessageEvent.T text) { @@ -2084,6 +2161,9 @@ public class RoomActivity extends BaseMvpActivity appProcesses = activityManager.getRunningAppProcesses(); @@ -2780,7 +2882,7 @@ public class RoomActivity extends BaseMvpActivity= RoomSettingBean.QXRoomSettingTypeRoomLeave && type <= RoomSettingBean.QXRoomSettingTypeRoomReport - ) { + ) { return true; - }else { - if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy){ + } else { + if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy) { return false; } } @@ -401,7 +413,7 @@ public class RoomSettingFragment extends BaseMvpDialogFragment 0 && roomId != null) { + if (MvpPre==null){ + MvpPre = new SingSongPresenter(this, getContext()); + } MvpPre.userOnlineStatus(userIds.toString(), roomId); } else { // updateWheatData(); diff --git a/moduleroom/src/main/java/com/example/moduleroom/presenter/SingSongPresenter.java b/moduleroom/src/main/java/com/example/moduleroom/presenter/SingSongPresenter.java index 7467e6b..350d338 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/presenter/SingSongPresenter.java +++ b/moduleroom/src/main/java/com/example/moduleroom/presenter/SingSongPresenter.java @@ -9,6 +9,7 @@ import com.xscm.moduleutil.bean.PkSwTokenBean; import com.xscm.moduleutil.bean.UserOnlineStatusBean; import com.xscm.moduleutil.bean.room.RoomInfoResp; import com.xscm.moduleutil.http.BaseObserver; +import com.xscm.moduleutil.http.RetrofitClient; import com.xscm.moduleutil.rtc.AgoraManager; import com.xscm.moduleutil.utils.SpUtil; @@ -26,7 +27,7 @@ public class SingSongPresenter extends BaseRoomPresenter @Override public void applyPit(String roomId, String pitNumber) { - api.applyPit(roomId, pitNumber, new BaseObserver() { + RetrofitClient.getInstance().applyPit(roomId, pitNumber, new BaseObserver() { @Override public void onSubscribe(Disposable d) { addDisposable(d); @@ -44,7 +45,7 @@ public class SingSongPresenter extends BaseRoomPresenter @Override public void setMutePit(String roomId, String pitNumber, String is_mute) { - api.setMutePit(roomId, pitNumber, is_mute, new BaseObserver() { + RetrofitClient.getInstance().setMutePit(roomId, pitNumber, is_mute, new BaseObserver() { @Override public void onSubscribe(Disposable d) { addDisposable(d); @@ -62,7 +63,7 @@ public class SingSongPresenter extends BaseRoomPresenter @Override public void setLockPit(String roomId, String pitNumber, String is_lock) { - api.setLockPit(roomId, pitNumber, is_lock, new BaseObserver() { + RetrofitClient.getInstance().setLockPit(roomId, pitNumber, is_lock, new BaseObserver() { @Override public void onSubscribe(Disposable d) { addDisposable(d); @@ -81,7 +82,7 @@ public class SingSongPresenter extends BaseRoomPresenter /// 请求房间信息,当pk同意的时候,获取对方房间信息,同时请求自己房间信息,做页面的更新 添加一type:1:请求对方信息 2:请求自己房间信息 3:是否接受PK @Override public void postRoomInfo(String roomId, String number,int type) { - api.postRoomInfo(roomId, new BaseObserver() { + RetrofitClient.getInstance().postRoomInfo(roomId, new BaseObserver() { @Override public void onSubscribe(Disposable d) { addDisposable(d); @@ -121,7 +122,7 @@ public class SingSongPresenter extends BaseRoomPresenter @Override public void endPk(String pk_id, String type, String user_id) { - api.endPk(pk_id, type, user_id, new BaseObserver() { + RetrofitClient.getInstance().endPk(pk_id, type, user_id, new BaseObserver() { @Override public void onSubscribe(Disposable d) { addDisposable(d); @@ -139,7 +140,7 @@ public class SingSongPresenter extends BaseRoomPresenter @Override public void userOnlineStatus(String userId, String roomid) { - api.userOnlineStatus(userId, roomid, new BaseObserver>() { + RetrofitClient.getInstance().userOnlineStatus(userId, roomid, new BaseObserver>() { @Override public void onSubscribe(Disposable d) { addDisposable(d); @@ -156,7 +157,7 @@ public class SingSongPresenter extends BaseRoomPresenter } public void postRoomSwToken(String roomId,int uid) { - api.postRoomSwToken(roomId, new BaseObserver() { + RetrofitClient.getInstance().postRoomSwToken(roomId, new BaseObserver() { @Override public void onSubscribe(Disposable d) { addDisposable(d); diff --git a/moduleroom/src/main/res/layout/activity_room.xml b/moduleroom/src/main/res/layout/activity_room.xml index ac2e7be..15786cf 100644 --- a/moduleroom/src/main/res/layout/activity_room.xml +++ b/moduleroom/src/main/res/layout/activity_room.xml @@ -483,6 +483,43 @@ app:layout_constraintEnd_toEndOf="parent" tools:visibility="visible" /> + + + + + + + + + + list) { } + + @Override + public void bindDetai(BindDetail bindDetail) { + + } } \ No newline at end of file diff --git a/modulevocal/src/main/java/com/example/modulevocal/activity/WithdrawalListActivity.java b/modulevocal/src/main/java/com/example/modulevocal/activity/WithdrawalListActivity.java index 71b5383..7039d92 100644 --- a/modulevocal/src/main/java/com/example/modulevocal/activity/WithdrawalListActivity.java +++ b/modulevocal/src/main/java/com/example/modulevocal/activity/WithdrawalListActivity.java @@ -10,6 +10,7 @@ import com.example.modulevocal.conacts.WithdrawalConacts; import com.example.modulevocal.databinding.ActivityWithdrawalListBinding; import com.example.modulevocal.presenter.WithdrawalPresenter; import com.xscm.moduleutil.activity.BaseMvpActivity; +import com.xscm.moduleutil.bean.BindDetail; import com.xscm.moduleutil.bean.BindType; import com.xscm.moduleutil.bean.WalletBean; import com.xscm.moduleutil.bean.WalletConfig; @@ -89,4 +90,9 @@ public class WithdrawalListActivity extends BaseMvpActivity list) { adapter.setNewData(list); } + + @Override + public void bindDetai(BindDetail bindDetail) { + + } } \ No newline at end of file diff --git a/modulevocal/src/main/java/com/example/modulevocal/conacts/WithdrawalConacts.java b/modulevocal/src/main/java/com/example/modulevocal/conacts/WithdrawalConacts.java index 8a3c4d4..f5bccc0 100644 --- a/modulevocal/src/main/java/com/example/modulevocal/conacts/WithdrawalConacts.java +++ b/modulevocal/src/main/java/com/example/modulevocal/conacts/WithdrawalConacts.java @@ -4,6 +4,7 @@ import android.app.Activity; import com.xscm.moduleutil.activity.IPresenter; import com.xscm.moduleutil.activity.IView; +import com.xscm.moduleutil.bean.BindDetail; import com.xscm.moduleutil.bean.BindType; import com.xscm.moduleutil.bean.WalletBean; import com.xscm.moduleutil.bean.WalletConfig; @@ -22,6 +23,8 @@ public final class WithdrawalConacts { void withdrawal(String s); void withdrawalList(List list); + + void bindDetai(BindDetail bindDetail); } public interface IMePre extends IPresenter { @@ -37,5 +40,7 @@ public final class WithdrawalConacts { void withdrawal(String number,String type,String sms_code); void withdrawalList(String page,String page_limit,String search_stime,String search_etime); + + void bindDetai(String userId,String type); } } diff --git a/modulevocal/src/main/java/com/example/modulevocal/fragment/MyFollowFragment.java b/modulevocal/src/main/java/com/example/modulevocal/fragment/MyFollowFragment.java index 8bae6b1..824e3ab 100644 --- a/modulevocal/src/main/java/com/example/modulevocal/fragment/MyFollowFragment.java +++ b/modulevocal/src/main/java/com/example/modulevocal/fragment/MyFollowFragment.java @@ -68,7 +68,7 @@ public class MyFollowFragment extends BaseMvpFragment implements WithdrawalConacts.IMePre { + + WithdrawalConacts.View mView; public WithdrawalPresenter(WithdrawalConacts.View view, Context context) { super(view, context); + this.mView = view; } @Override @@ -29,6 +34,9 @@ public class WithdrawalPresenter extends BasePresenter i @Override public void onNext(WalletBean walletBean) { + if (MvpRef == null){ + MvpRef=new WeakReference<>(mView); + } MvpRef.get().wallet(walletBean); } }); @@ -44,6 +52,9 @@ public class WithdrawalPresenter extends BasePresenter i @Override public void onNext(BindType bindType) { + if (MvpRef == null){ + MvpRef=new WeakReference<>(mView); + } MvpRef.get().bindType(bindType); } }); @@ -59,6 +70,9 @@ public class WithdrawalPresenter extends BasePresenter i @Override public void onNext(WalletConfig walletConfig) { + if (MvpRef == null){ + MvpRef=new WeakReference<>(mView); + } MvpRef.get().getWalletConfig(walletConfig); } }); @@ -74,6 +88,9 @@ public class WithdrawalPresenter extends BasePresenter i @Override public void onNext(String s) { + if (MvpRef == null){ + MvpRef=new WeakReference<>(mView); + } MvpRef.get().bind(); } }); @@ -107,6 +124,9 @@ public class WithdrawalPresenter extends BasePresenter i @Override public void onNext(String s) { + if (MvpRef == null){ + MvpRef=new WeakReference<>(mView); + } MvpRef.get().withdrawal(s); } }); @@ -122,8 +142,29 @@ public class WithdrawalPresenter extends BasePresenter i @Override public void onNext(List withdrawalBeans) { + if (MvpRef == null){ + MvpRef=new WeakReference<>(mView); + } MvpRef.get().withdrawalList(withdrawalBeans); } }); } + + @Override + public void bindDetai(String userId, String type) { + api.bindDetai(userId, type, new BaseObserver() { + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(BindDetail bindDetail) { + if (MvpRef == null){ + MvpRef=new WeakReference<>(mView); + } + MvpRef.get().bindDetai(bindDetail); + } + }); + } } diff --git a/modulevoice/src/main/java/com/example/modulevoice/fragment/HotListFragment.java b/modulevoice/src/main/java/com/example/modulevoice/fragment/HotListFragment.java index 92f1251..cdb3fee 100644 --- a/modulevoice/src/main/java/com/example/modulevoice/fragment/HotListFragment.java +++ b/modulevoice/src/main/java/com/example/modulevoice/fragment/HotListFragment.java @@ -116,6 +116,7 @@ public class HotListFragment extends BaseMvpFragment= mAdapter.getData().size()) { return; @@ -127,11 +128,11 @@ public class HotListFragment extends BaseMvpFragment