diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/IndexRecommendRoom.kt b/BaseModule/src/main/java/com/xscm/moduleutil/bean/IndexRecommendRoom.kt new file mode 100644 index 00000000..1a2dda22 --- /dev/null +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/IndexRecommendRoom.kt @@ -0,0 +1,18 @@ +package com.xscm.moduleutil.bean + +/** + * 项目名称:羽声语音 + * 时间:2025/12/8 16:30 + * 用途:首页弹框推荐房间 + */ +class IndexRecommendRoom { + var room_id: String? = "" + var user_id: String? ="" + var room_name: String? = "" + var room_cover: String? = "" + + /* "id": "string", + "user_id": "string", + "room_name": "string", + "room_cover": "string"*/ +} \ No newline at end of file diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomTypeModel.java b/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomTypeModel.java index 07cacc83..d309ad00 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomTypeModel.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomTypeModel.java @@ -21,5 +21,6 @@ public class RoomTypeModel { private String label_name; private String type; private String sort; + private int default_index; //1 选中 0 未选中 } diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java b/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java index d7467e15..100d8318 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java @@ -35,6 +35,7 @@ public class UserInfo extends BaseEvent implements Serializable { private int charm_level; //魅力等级 private int is_use_code; //是否是靓号 0否 1是 private String tencent_im; + private String token; private String jia_jia;//坐骑 private int is_in_pit;//是否在麦上,1在0不在 private int is_open_live_remind;//是否设置开播提醒 @@ -70,6 +71,7 @@ public class UserInfo extends BaseEvent implements Serializable { private RelationshipBean qinmi; private RelationshipBean zhenai; + private String mobile;//手机号 private int heartId; // "heartId": 4, private int heartNum; // diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/dialog/InviteDialog.java b/BaseModule/src/main/java/com/xscm/moduleutil/dialog/InviteDialog.java deleted file mode 100644 index 1cb8057e..00000000 --- a/BaseModule/src/main/java/com/xscm/moduleutil/dialog/InviteDialog.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xscm.moduleutil.dialog; - -import android.content.Context; -import android.view.Window; -import android.view.WindowManager; - -import androidx.annotation.NonNull; - -import com.blankj.utilcode.util.ScreenUtils; -import com.xscm.moduleutil.R; -import com.xscm.moduleutil.databinding.DialogInviteBinding; -import com.xscm.moduleutil.widget.dialog.BaseDialog; -/** - *@author lxj - *@data 2025年5月14日 - *@description: 房间邀请弹窗 - */ -public class InviteDialog extends BaseDialog { - public InviteDialog(@NonNull Context context) { - super(context); - } - - @Override - public int getLayoutId() { - return R.layout.dialog_invite; - } - - @Override - public void initView() { - setCancelable(false); - setCanceledOnTouchOutside(false); - Window window = getWindow(); - window.setLayout((int) (ScreenUtils.getScreenWidth() * 315.f / 375), WindowManager.LayoutParams.WRAP_CONTENT); - mBinding.ivClose.setOnClickListener(v -> dismiss()); - - } - - @Override - public void initData() { - - } -} diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java b/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java index 08927e01..5aa73c41 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java @@ -398,13 +398,16 @@ public interface ApiServer { @GET(Constants.GET_MY_CP_ROOM_LIST) Call>> myCpRoom(); + @GET(Constants.CHECK_CREATE_ROOM) + Call> checkCreateRoom(); + @FormUrlEncoded @POST(Constants.CLEAR_LOGIN_INFO) Call> clearLoginInfo(@Field("token") String token); @FormUrlEncoded @POST(Constants.CANCEL) - Call> cancel(@Field("token") String token); + Call> cancel(@Field("token") String token,@Field("sms_code")String sms_code); @FormUrlEncoded @POST(Constants.POST_MODIFY_HIDE_STATUS) @@ -540,6 +543,9 @@ public interface ApiServer { @GET(Constants.GET_ACTIVITIES_PERMISSION) Call> activitiesPermission(); + @GET(Constants.GET_INDEX_RECOMMEND_ROOM) + Call> index_recommend_room(); + @GET(Constants.GET_DAY_DROP_GIFT) Call> getDayDropGift(); diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java b/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java index 662f1ffd..c0cdb3fe 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java @@ -545,7 +545,7 @@ public class RetrofitClient { } catch (ClassNotFoundException e) { } } else { - observer.onNext(baseModel.getMsg()); + ToastUtils.showLong(baseModel.getMsg()); } } } @@ -2338,6 +2338,39 @@ public class RetrofitClient { }); } + public void check_create_room(BaseObserver observer){ + sApiServer.checkCreateRoom().enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.code() == 200) { + BaseModel stringBaseModel = response.body(); + if (stringBaseModel.getCode() == 1) { + observer.onNext(""); + }else if (stringBaseModel.getCode() == 0) { + com.hjq.toast.ToastUtils.show(stringBaseModel.getMsg()); + }else if(stringBaseModel.getCode()==301){ + try { + CommonAppContext.getInstance().clearLoginInfo(); + ToastUtils.showShort(stringBaseModel.getMsg()); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + }else { + LogUtils.e("check_create_room", response.message()); + } + + } + + @Override + public void onFailure(Call> call, Throwable t) { + LogUtils.e("check_create_room", t); + + } + }); + + } + public void startPk(String pk_id, String pk_times, BaseObserver observer) { sApiServer.startPk(pk_id, pk_times).enqueue(new Callback() { @Override @@ -2389,6 +2422,7 @@ public class RetrofitClient { if (activitiesPermissionBaseModel.getCode() == 1) { observer.onNext(activitiesPermissionBaseModel.getData()); } else if (activitiesPermissionBaseModel.getCode() == 0) { + observer.onNext(new ActivitiesPermission()); ToastUtils.showShort(activitiesPermissionBaseModel.getMsg()); } else if (activitiesPermissionBaseModel.getCode() == 301) { try { @@ -2408,6 +2442,36 @@ public class RetrofitClient { }); } + public void index_recommend_room(BaseObserver observer) { + sApiServer.index_recommend_room().enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + if (response.code() == 200) { + BaseModel indexRecommendRoomBaseModel = response.body(); + if (indexRecommendRoomBaseModel.getCode() == 1) { + observer.onNext(indexRecommendRoomBaseModel.getData()); + } else if (indexRecommendRoomBaseModel.getCode() == 0) { + ToastUtils.showShort(indexRecommendRoomBaseModel.getMsg()); + } else if (indexRecommendRoomBaseModel.getCode() == 301) { + try { + CommonAppContext.getInstance().clearLoginInfo(); + ToastUtils.showShort(indexRecommendRoomBaseModel.getMsg()); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + LogUtils.e("首页房间推荐",t.fillInStackTrace()); + } + }); + + } + public void wallet(BaseObserver observer) { sApiServer.wallet().enqueue(new Callback>() { @Override @@ -3847,8 +3911,8 @@ public class RetrofitClient { }); } - public void cancel(BaseObserver observer) { - sApiServer.cancel(SpUtil.getToken()).enqueue(new Callback>() { + public void cancel(String sms_code,BaseObserver observer) { + sApiServer.cancel(SpUtil.getToken(),sms_code).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java b/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java index c655429c..c57f1536 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java @@ -335,6 +335,7 @@ public class Constants { public static final String POST_AUCTION_MODE = "/api/RoomAuction/room_auction_mode";//修改房间竞拍模式 public static final String POST_ROOM_AUCTION_LIST = "/api/RoomAuction/room_auction_list";//房间竞拍列表 public static final String GET_MY_CP_ROOM_LIST = "/api/Room/my_cp_room";//我的Cp房 + public static final String CHECK_CREATE_ROOM = "/api/Room/check_create_room";//创建房间检测 public static final String POST_SEARCH_PK_ROOM = "/api/RoomPk/search_pk_room";//搜索 或推荐的pk房间 public static final String POST_SEND_PK = "/api/RoomPk/send_pk";//发起PK邀请 public static final String ACCEPT_PK = "/api/RoomPk/accept_pk";//接受/拒绝 PK邀请 @@ -383,6 +384,7 @@ public class Constants { public static final String GET_FIRST_CHARGE_GIFT = "/api/Activities/first_charge_gift";//首充好礼列表接口 public static final String GET_NEW_CHARGE_GIFT = "/api/Activities/new_charge_gift";//新人好礼列表接口(弹框) public static final String GET_ACTIVITIES_PERMISSION = "/api/Activities/activities_permission";//活动弹框权限 + public static final String GET_INDEX_RECOMMEND_ROOM = "/api/Index/index_recommend_room";//首页弹窗推荐房间 public static final String GET_DAY_DROP_GIFT = "/api/Activities/day_drop_gift";//天降好礼列表接口(弹框) public static final String dailyTasksReceive = "/api/Dailytasks/dailyTasksReceive";//领取每日任务奖励 public static final String postRoomSwToken = "/api/Room/update_user_sw_token";//获取用户声网token diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/widget/picker/PictureSelectorUtil.java b/BaseModule/src/main/java/com/xscm/moduleutil/widget/picker/PictureSelectorUtil.java index 64138a0c..e8a78f32 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/widget/picker/PictureSelectorUtil.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/widget/picker/PictureSelectorUtil.java @@ -137,11 +137,11 @@ public class PictureSelectorUtil { public UCrop.Options buildOptions() { UCrop.Options options = new UCrop.Options(); options.setHideBottomControls(true);//是否显示裁剪 - options.setFreeStyleCropEnabled(true);//裁剪是否可以拖动 + options.setFreeStyleCropEnabled(false);//裁剪是否可以拖动 options.setShowCropFrame(true);//是否显示裁剪边缘 options.setShowCropGrid(true);//是否显示裁剪网格 options.setCircleDimmedLayer(false);//圆形头像裁剪 - options.withAspectRatio(1, 1); + options.withAspectRatio(1, 1);//裁剪比例 options.isCropDragSmoothToCenter(false); options.isForbidCropGifWebp(false); options.isForbidSkipMultipleCrop(true); diff --git a/BaseModule/src/main/res/mipmap-hdpi/invite_bj.png b/BaseModule/src/main/res/mipmap-hdpi/invite_bj.png new file mode 100644 index 00000000..498597f3 Binary files /dev/null and b/BaseModule/src/main/res/mipmap-hdpi/invite_bj.png differ diff --git a/BaseModule/src/main/res/mipmap-xhdpi/invite_bj.png b/BaseModule/src/main/res/mipmap-xhdpi/invite_bj.png new file mode 100644 index 00000000..a6ab4087 Binary files /dev/null and b/BaseModule/src/main/res/mipmap-xhdpi/invite_bj.png differ diff --git a/BaseModule/src/main/res/mipmap-xxhdpi/invite_bj.png b/BaseModule/src/main/res/mipmap-xxhdpi/invite_bj.png new file mode 100644 index 00000000..960b71fb Binary files /dev/null and b/BaseModule/src/main/res/mipmap-xxhdpi/invite_bj.png differ diff --git a/BaseModule/src/main/res/mipmap-xxxhdpi/invite_bj.webp b/BaseModule/src/main/res/mipmap-xxxhdpi/invite_bj.webp deleted file mode 100644 index 27cb815d..00000000 Binary files a/BaseModule/src/main/res/mipmap-xxxhdpi/invite_bj.webp and /dev/null differ diff --git a/MainModule/src/main/java/com/xscm/modulemain/Application.kt b/MainModule/src/main/java/com/xscm/modulemain/Application.kt index 27bb3f93..de675d76 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/Application.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/Application.kt @@ -1,14 +1,22 @@ package com.xscm.modulemain +import android.app.Activity import android.content.Context +import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.CrashUtils import com.blankj.utilcode.util.LogUtils +import com.blankj.utilcode.util.Utils import com.opensource.svgaplayer.utils.log.SVGALogger import com.scwang.smartrefresh.layout.SmartRefreshLayout import com.scwang.smartrefresh.layout.footer.ClassicsFooter import com.scwang.smartrefresh.layout.header.ClassicsHeader +import com.xscm.modulemain.dialog.InviteDialog import com.xscm.modulemain.widget.WheatLayoutSingManager import com.xscm.moduleutil.base.CommonAppContext +import com.xscm.moduleutil.bean.IndexRecommendRoom +import com.xscm.moduleutil.http.BaseObserver +import com.xscm.moduleutil.http.RetrofitClient +import io.reactivex.disposables.Disposable open class Application : CommonAppContext() { @@ -19,6 +27,7 @@ open class Application : CommonAppContext() { var CRASHUTILS_SAVE_PATH = "" var isAgoraStop = false + var inviteDialog: InviteDialog? = null // 单例实例 companion object { @@ -55,6 +64,33 @@ open class Application : CommonAppContext() { initLogUtils() initCrashUtils() initSmartRefreshLayout() + AppUtils.registerAppStatusChangedListener(object : Utils.OnAppStatusChangedListener { + override fun onForeground(activity: Activity?) {//应用切换到前台 + + if (!CommonAppContext.getInstance().isPlaying) { + RetrofitClient.getInstance() + .index_recommend_room(object : BaseObserver() { + override fun onSubscribe(d: Disposable) { + } + + override fun onNext(t: IndexRecommendRoom) { + if (t != null) { + inviteDialog = activity?.let { InviteDialog(it, t) } + if (inviteDialog?.isShowing == false) { + inviteDialog?.setData(t) + inviteDialog?.show() + } + } + } + + }) + } + } + + override fun onBackground(activity: Activity?) {//应用切换到后台 + } + + }) } private fun initLogUtils() { diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java b/MainModule/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java index 08395357..0304b557 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java @@ -1,14 +1,25 @@ package com.xscm.modulemain.activity.login.activity; +import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.view.View; +import android.widget.ImageView; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; import com.luck.picture.lib.basic.PictureSelector; import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.engine.CropFileEngine; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.style.PictureSelectorStyle; import com.xscm.modulemain.R; @@ -25,10 +36,14 @@ import com.xscm.moduleutil.utils.ImageUtils; import com.xscm.moduleutil.utils.PermissionDescriptionHelper; import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.widget.Constants; +import com.xscm.moduleutil.widget.picker.PictureSelectorUtil; +import com.yalantis.ucrop.UCrop; +import com.yalantis.ucrop.UCropImageEngine; import org.greenrobot.eventbus.EventBus; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -196,18 +211,65 @@ public class ImproveInfoActivity extends BaseMvpActivity dataSource, int requestCode) { + UCrop.Options options = pictureSelectorUtil.buildOptions(); + UCrop uCrop = UCrop.of(srcUri, destinationUri, dataSource); + uCrop.withOptions(options); + uCrop.setImageEngine(new UCropImageEngine() { + @Override + public void loadImage(Context context, String url, ImageView imageView) { + Glide.with(context).load(url).override(180, 180).into(imageView); + } + + @Override + public void loadImage(Context context, Uri url, int maxWidth, int maxHeight, OnCallbackListener call) { + Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight).into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @org.jetbrains.annotations.Nullable Transition transition) { + if (call != null) { + call.onCall(resource); + } + } + + @Override + public void onLoadCleared(@org.jetbrains.annotations.Nullable Drawable placeholder) { + if (call != null) { + call.onCall(null); + } + } + }); + } + }); + uCrop.start(fragment.requireActivity(), fragment, requestCode); + } + }) + .forResult(requestCode); } diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java b/MainModule/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java index d37dcf9a..818e12ce 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java @@ -58,12 +58,14 @@ import com.xscm.moduleutil.bean.AppUpdateModel; import com.xscm.moduleutil.bean.FirstChargeBean; import com.xscm.moduleutil.bean.FirstChargeGiftBean; import com.xscm.moduleutil.bean.HeavenGiftBean; +import com.xscm.moduleutil.bean.IndexRecommendRoom; import com.xscm.moduleutil.bean.PermissionPicBean; import com.xscm.moduleutil.bean.ThemeBean; import com.xscm.moduleutil.bean.room.RoomOnline; import com.xscm.moduleutil.bean.room.RoomOnlineBean; import com.xscm.moduleutil.dialog.FirstChargeDialog; import com.xscm.moduleutil.dialog.HeavenGiftDialog; +import com.xscm.modulemain.dialog.InviteDialog; import com.xscm.moduleutil.dialog.NewPeopleDialog; import com.xscm.moduleutil.dialog.RechargeDialogFragment; import com.xscm.moduleutil.event.RoomOutEvent; @@ -91,6 +93,7 @@ import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; + @Route(path = ARouteConstants.ME) public class MainActivity extends BaseMvpActivity implements HomeContacts.View, View.OnClickListener, LocationProvider.LocationCallback { @@ -114,6 +117,8 @@ public class MainActivity extends BaseMvpActivity { Animation rivRotateAnimation = AnimationUtils.loadAnimation(MainActivity.this, com.xscm.moduleutil.R.anim.rotate_anim); mBinding.riv.startAnimation(rivRotateAnimation); @@ -768,6 +780,10 @@ public class MainActivity extends BaseMvpActivity implements H }); } + @Override + public void index_recommend_room() { + api.index_recommend_room(new BaseObserver() { + + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(IndexRecommendRoom indexRecommendRoom) { + if (MvpRef==null) + MvpRef=new WeakReference<>(mView); + MvpRef.get().index_recommend_room(indexRecommendRoom); + } + }); + } + } diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/msg/OfficialNoticeActivity.java b/MainModule/src/main/java/com/xscm/modulemain/activity/msg/OfficialNoticeActivity.java index 11b84123..756889e1 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/msg/OfficialNoticeActivity.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/msg/OfficialNoticeActivity.java @@ -61,32 +61,32 @@ public class OfficialNoticeActivity extends BaseMvpActivity 0) { - mBinding.slidingTabLayout.selectTab(mBinding.slidingTabLayout.getTabAt(0)); + int defaultIndex = 0; // 默认选中第一项 + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getDefault_index() == 1) { + defaultIndex = i; + break; + } + } + mBinding.slidingTabLayout.selectTab(mBinding.slidingTabLayout.getTabAt(defaultIndex)); } + } @Override diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java b/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java index 31f9d9db..8946c0df 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceFragment.java @@ -8,8 +8,10 @@ import android.view.View; import androidx.fragment.app.Fragment; import com.alibaba.android.arouter.launcher.ARouter; +import com.blankj.utilcode.util.ActivityUtils; import com.blankj.utilcode.util.ToastUtils; import com.xscm.modulemain.R; +import com.xscm.modulemain.activity.main.activity.MainActivity; import com.xscm.modulemain.activity.room.activity.RankingListActivity; import com.xscm.modulemain.activity.room.activity.SearchActivity; import com.xscm.modulemain.activity.room.contacts.VoiceContacts; @@ -99,7 +101,6 @@ public class VoiceFragment extends BaseMvpFragment fragments = new SparseArray<>(); private String[] titles = new String[]{"我创建的", "我主持的", "我管理的", "我关注的"}; diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java index 4bb1064a..bb19c851 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java @@ -4,8 +4,15 @@ import android.annotation.SuppressLint; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; +import android.os.CountDownTimer; import android.os.Handler; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; import androidx.appcompat.app.AlertDialog; @@ -24,8 +31,10 @@ import com.xscm.modulemain.databinding.ActivitySettingBinding; import com.xscm.modulemain.dialog.YouthModelDialog; import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.bean.UserInfo; +import com.xscm.moduleutil.color.ThemeableDrawableUtils; import com.xscm.moduleutil.dialog.RealNameDialog; import com.xscm.moduleutil.utils.ARouteConstants; +import com.xscm.moduleutil.utils.ColorManager; import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.widget.CommonAppConfig; @@ -39,9 +48,9 @@ import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** - *@author qx - *@data 2025/8/14 - *@description: 设置 + * @author qx + * @data 2025/8/14 + * @description: 设置 */ public class SettingActivity extends BaseMvpActivity implements SettingConacts.View { @@ -64,9 +73,9 @@ public class SettingActivity extends BaseMvpActivity() { // @SuppressLint("CheckResult") @@ -273,6 +287,110 @@ public class SettingActivity extends BaseMvpActivity= 6) { + + if (MvpPre == null) { + MvpPre = bindPresenter(); + } + MvpPre.cancel(code); + + dialog.dismiss(); + }else { + com.hjq.toast.ToastUtils.show("请输入正确的验证码"); + } + } + }); + +// // 验证码输入完成时的处理 +// etVerificationCode.setOnEditorActionListener(new TextView.OnEditorActionListener() { +// @Override +// public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { +// String code = etVerificationCode.getText().toString().trim(); +// if (!TextUtils.isEmpty(code)) { +// // 验证码验证逻辑 +// MvpPre.withdrawal(mBinding.etCustomAmount.getText().toString(), selectedItem.getType(), code); +// dialog.dismiss(); +// } else { +// +// } +// return true; +// } +// }); + + etVerificationCode.addTextChangedListener(new TextWatcher() { + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + private void startCountDown(final TextView tvGetCode) { + final int[] count = {60}; + tvGetCode.setText("重新发送(" + count[0] + ")"); + new CountDownTimer(60000, 1000) { + public void onTick(long millisUntilFinished) { + tvGetCode.setText("重新发送(" + (count[0]--) + ")"); + } + + public void onFinish() { + tvGetCode.setText("获取验证码"); + tvGetCode.setEnabled(true); + } + }.start(); + } + private void showYouthModelDialog() { YouthModelDialog youthModelDialog = new YouthModelDialog(this, null); youthModelDialog.show(); @@ -286,6 +404,7 @@ public class SettingActivity extends BaseMvpActivity= 6) { + // 验证码验证逻辑 + MvpPre.withdrawal(mBinding.etCustomAmount.getText().toString(), selectedItem.getType(), code); + dialog.dismiss(); + }else { + com.hjq.toast.ToastUtils.show("请输入正确的验证码"); + } + } + }); + // // 验证码输入完成时的处理 // etVerificationCode.setOnEditorActionListener(new TextView.OnEditorActionListener() { // @Override @@ -258,12 +274,7 @@ public class WithdrawalActivity extends BaseMvpActivity= 6) { - // 验证码验证逻辑 - MvpPre.withdrawal(mBinding.etCustomAmount.getText().toString(), selectedItem.getType(), code); - dialog.dismiss(); - } + } }); } diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/MyRoomListContacts.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/MyRoomListContacts.java index e4db645d..e5c3c61d 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/MyRoomListContacts.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/MyRoomListContacts.java @@ -30,6 +30,8 @@ public final class MyRoomListContacts { void setAttentionListData(List attentionResps); void myCpRoom(List list); + + void check_create_room(); } public interface IRankingListPre extends IPresenter { @@ -49,6 +51,9 @@ public final class MyRoomListContacts { void getAttentionList(); void myCpRoom(); + + + void check_create_room(); } public interface DeatilsView extends IView { diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/SettingConacts.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/SettingConacts.java index d549224c..dafeae7f 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/SettingConacts.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/SettingConacts.java @@ -14,10 +14,12 @@ public class SettingConacts { public interface IMePre extends IPresenter { void clearLoginInfo(); - void cancel(); + void cancel(String sms_code); void getModifyHideStatus(String hide_status); void sendAppLog(); + + void sendCode(String phoneNumber,int type); } } diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyCreateFragment.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyCreateFragment.java index fb00775a..2998af15 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyCreateFragment.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyCreateFragment.java @@ -179,4 +179,9 @@ public class MyCreateFragment extends BaseMvpFragment list) { } + + @Override + public void check_create_room() { + + } } \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyManageFragment.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyManageFragment.java index f46dbb2c..ebc3ab1f 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyManageFragment.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyManageFragment.java @@ -157,4 +157,9 @@ public class MyManageFragment extends BaseMvpFragment list) { } + + @Override + public void check_create_room() { + + } } \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyRoomListFragment.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyRoomListFragment.java index d274a9cf..1a250e0f 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyRoomListFragment.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyRoomListFragment.java @@ -251,4 +251,9 @@ public class MyRoomListFragment extends BaseMvpFragment impl } }); } + + @Override + public void check_create_room() { + api.check_create_room(new BaseObserver(){ + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(String s) { + + } + }); + } } diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/SettingPresenter.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/SettingPresenter.java index 9af6243f..cac35236 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/SettingPresenter.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/SettingPresenter.java @@ -58,8 +58,8 @@ public class SettingPresenter extends BasePresenter impleme } @Override - public void cancel() { - api.cancel(new BaseObserver() { + public void cancel(String sms_code) { + api.cancel(sms_code,new BaseObserver() { @Override public void onSubscribe(Disposable d) { @@ -176,4 +176,21 @@ public class SettingPresenter extends BasePresenter impleme } }); } + + @Override + public void sendCode(String phoneNumber, int type) { + api.sendCode(phoneNumber, type + "", new BaseObserver() { + + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(Object o) { + + } + }); + + } } diff --git a/MainModule/src/main/java/com/xscm/modulemain/dialog/InviteDialog.kt b/MainModule/src/main/java/com/xscm/modulemain/dialog/InviteDialog.kt new file mode 100644 index 00000000..64a4c9a9 --- /dev/null +++ b/MainModule/src/main/java/com/xscm/modulemain/dialog/InviteDialog.kt @@ -0,0 +1,132 @@ +package com.xscm.modulemain.dialog + +import android.content.Context +import android.os.CountDownTimer +import android.view.Gravity +import android.view.ViewGroup +import com.blankj.utilcode.util.ScreenUtils +import com.xscm.modulemain.R +import com.xscm.modulemain.databinding.DialogInviteBinding +import com.xscm.modulemain.manager.RoomManager +import com.xscm.moduleutil.bean.IndexRecommendRoom +import com.xscm.moduleutil.color.ThemeableDrawableUtils +import com.xscm.moduleutil.utils.ColorManager +import com.xscm.moduleutil.utils.ImageUtils +import com.xscm.moduleutil.widget.dialog.BaseDialog + +/** + * 项目名称:羽声语音 + * 时间:2025/12/8 16:19 + * 用途:首页推荐房间 + */ +class InviteDialog(context: Context, data: IndexRecommendRoom?) : BaseDialog(context) { + private var countDownTimer: CountDownTimer? = null // 倒计时器 + private var data: IndexRecommendRoom? = data // 将构造函数参数赋值给成员变量 +// companion object { +// // 修改方法签名,允许 data 为空 +// fun show(context: Context, data: IndexRecommendRoom?) { +// // 创建并显示对话框,即使 data 为空也显示 +// val dialog = InviteDialog(context, data) +// dialog.show() +// } +// } + init { + // 设置对话框从底部弹出 + window?.setGravity(Gravity.CENTER) + // 设置对话框的宽度为屏幕宽度 + window?.setLayout( + (ScreenUtils.getScreenWidth() * 315f / 375).toInt(), + ViewGroup.LayoutParams.WRAP_CONTENT + ) + // 添加动画效果 + window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt) + setCancelable(false) + setCanceledOnTouchOutside(false) + } + + override fun getLayoutId(): Int { + return R.layout.dialog_invite + } + + override fun initView() { + // 设置邀请按钮文本 + ThemeableDrawableUtils.setThemeableRoundedBackground( + mBinding.btnPositive, + ColorManager.getInstance().getPrimaryColorInt(), + 53 + ) + mBinding.btnPositive.setTextColor(ColorManager.getInstance().getButtonColorInt()) + } + + override fun initData() { + + + mBinding.ivClose.setOnClickListener { + dismiss() + } + mBinding.btnPositive.setOnClickListener { + // 如果有房间数据,进入房间;否则只关闭对话框 + data?.let { roomData -> + RoomManager.getInstance() + .fetchRoomDataAndEnter(context, roomData.room_id, "", null) + } ?: run { + // 没有数据时,可以显示提示或执行其他操作 + // 这里我们只关闭对话框 + } + dismiss() + } + } + fun setData(data: IndexRecommendRoom?) { + this.data = data + // 设置房间数据 + data?.let { roomData -> + // 设置房间封面 + ImageUtils.loadHead(roomData.room_cover, mBinding.invitePic) + + // 启动倒计时 + startCountDown() + } ?: run { + + // 仍然启动倒计时,让用户可以关闭对话框 + startCountDown() + } + } + + /** + * 开始倒计时 + */ + private fun startCountDown() { + + countDownTimer = object : CountDownTimer(9 * 1000L, 1000) { + override fun onTick(millisUntilFinished: Long) { + val secondsLeft = (millisUntilFinished / 1000).toInt() + mBinding.btnNegative.setText("拒接" + " (" + secondsLeft + "s)") + } + + override fun onFinish() { + // 检查是否被主动取消 + dismiss() + } + }.start() + + + + // 设置点击事件,点击按钮也关闭对话框 + mBinding.btnNegative.setOnClickListener({ v -> + if (countDownTimer != null) { + countDownTimer?.cancel() + } + dismiss() + }) + } + + override fun dismiss() { + // 在对话框关闭前取消倒计时 + if (countDownTimer != null) { + countDownTimer?.cancel() + } + super.dismiss() + } + + +} \ No newline at end of file diff --git a/BaseModule/src/main/res/layout/dialog_invite.xml b/MainModule/src/main/res/layout/dialog_invite.xml similarity index 52% rename from BaseModule/src/main/res/layout/dialog_invite.xml rename to MainModule/src/main/res/layout/dialog_invite.xml index 2d6544f7..0f84d782 100644 --- a/BaseModule/src/main/res/layout/dialog_invite.xml +++ b/MainModule/src/main/res/layout/dialog_invite.xml @@ -13,28 +13,33 @@ - + /> + + + app:layout_constraintTop_toBottomOf="@+id/tv_c" + android:visibility="gone"/> + app:layout_constraintTop_toBottomOf="@+id/iv_bg" + android:visibility="gone"/> + +