1:修改头像截取设置默认宽高

2:修改首页默认展示房间列表tab
3:修改创建房间,提示需要签约10个徒弟的功能
4:修改注销用户的时候,当有手机号的时候,进行二次验证码确认
5:首页推荐房间弹框
This commit is contained in:
2025-12-08 19:08:07 +08:00
parent 1af373846f
commit 338d704904
34 changed files with 727 additions and 115 deletions

View File

@@ -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"*/
}

View File

@@ -21,5 +21,6 @@ public class RoomTypeModel {
private String label_name; private String label_name;
private String type; private String type;
private String sort; private String sort;
private int default_index; //1 选中 0 未选中
} }

View File

@@ -35,6 +35,7 @@ public class UserInfo extends BaseEvent implements Serializable {
private int charm_level; //魅力等级 private int charm_level; //魅力等级
private int is_use_code; //是否是靓号 0否 1是 private int is_use_code; //是否是靓号 0否 1是
private String tencent_im; private String tencent_im;
private String token;
private String jia_jia;//坐骑 private String jia_jia;//坐骑
private int is_in_pit;//是否在麦上1在0不在 private int is_in_pit;//是否在麦上1在0不在
private int is_open_live_remind;//是否设置开播提醒 private int is_open_live_remind;//是否设置开播提醒
@@ -70,6 +71,7 @@ public class UserInfo extends BaseEvent implements Serializable {
private RelationshipBean qinmi; private RelationshipBean qinmi;
private RelationshipBean zhenai; private RelationshipBean zhenai;
private String mobile;//手机号
private int heartId; // "heartId": 4, private int heartId; // "heartId": 4,
private int heartNum; // private int heartNum; //

View File

@@ -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<DialogInviteBinding> {
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() {
}
}

View File

@@ -398,13 +398,16 @@ public interface ApiServer {
@GET(Constants.GET_MY_CP_ROOM_LIST) @GET(Constants.GET_MY_CP_ROOM_LIST)
Call<BaseModel<List<MyCpRoom>>> myCpRoom(); Call<BaseModel<List<MyCpRoom>>> myCpRoom();
@GET(Constants.CHECK_CREATE_ROOM)
Call<BaseModel<String>> checkCreateRoom();
@FormUrlEncoded @FormUrlEncoded
@POST(Constants.CLEAR_LOGIN_INFO) @POST(Constants.CLEAR_LOGIN_INFO)
Call<BaseModel<String>> clearLoginInfo(@Field("token") String token); Call<BaseModel<String>> clearLoginInfo(@Field("token") String token);
@FormUrlEncoded @FormUrlEncoded
@POST(Constants.CANCEL) @POST(Constants.CANCEL)
Call<BaseModel<String>> cancel(@Field("token") String token); Call<BaseModel<String>> cancel(@Field("token") String token,@Field("sms_code")String sms_code);
@FormUrlEncoded @FormUrlEncoded
@POST(Constants.POST_MODIFY_HIDE_STATUS) @POST(Constants.POST_MODIFY_HIDE_STATUS)
@@ -540,6 +543,9 @@ public interface ApiServer {
@GET(Constants.GET_ACTIVITIES_PERMISSION) @GET(Constants.GET_ACTIVITIES_PERMISSION)
Call<BaseModel<ActivitiesPermission>> activitiesPermission(); Call<BaseModel<ActivitiesPermission>> activitiesPermission();
@GET(Constants.GET_INDEX_RECOMMEND_ROOM)
Call<BaseModel<IndexRecommendRoom>> index_recommend_room();
@GET(Constants.GET_DAY_DROP_GIFT) @GET(Constants.GET_DAY_DROP_GIFT)
Call<BaseModel<HeavenGiftBean>> getDayDropGift(); Call<BaseModel<HeavenGiftBean>> getDayDropGift();

View File

@@ -545,7 +545,7 @@ public class RetrofitClient {
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
} }
} else { } else {
observer.onNext(baseModel.getMsg()); ToastUtils.showLong(baseModel.getMsg());
} }
} }
} }
@@ -2338,6 +2338,39 @@ public class RetrofitClient {
}); });
} }
public void check_create_room(BaseObserver<String> observer){
sApiServer.checkCreateRoom().enqueue(new Callback<BaseModel<String>>() {
@Override
public void onResponse(Call<BaseModel<String>> call, Response<BaseModel<String>> response) {
if (response.code() == 200) {
BaseModel<String> 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<BaseModel<String>> call, Throwable t) {
LogUtils.e("check_create_room", t);
}
});
}
public void startPk(String pk_id, String pk_times, BaseObserver<String> observer) { public void startPk(String pk_id, String pk_times, BaseObserver<String> observer) {
sApiServer.startPk(pk_id, pk_times).enqueue(new Callback<ResponseBody>() { sApiServer.startPk(pk_id, pk_times).enqueue(new Callback<ResponseBody>() {
@Override @Override
@@ -2389,6 +2422,7 @@ public class RetrofitClient {
if (activitiesPermissionBaseModel.getCode() == 1) { if (activitiesPermissionBaseModel.getCode() == 1) {
observer.onNext(activitiesPermissionBaseModel.getData()); observer.onNext(activitiesPermissionBaseModel.getData());
} else if (activitiesPermissionBaseModel.getCode() == 0) { } else if (activitiesPermissionBaseModel.getCode() == 0) {
observer.onNext(new ActivitiesPermission());
ToastUtils.showShort(activitiesPermissionBaseModel.getMsg()); ToastUtils.showShort(activitiesPermissionBaseModel.getMsg());
} else if (activitiesPermissionBaseModel.getCode() == 301) { } else if (activitiesPermissionBaseModel.getCode() == 301) {
try { try {
@@ -2408,6 +2442,36 @@ public class RetrofitClient {
}); });
} }
public void index_recommend_room(BaseObserver<IndexRecommendRoom> observer) {
sApiServer.index_recommend_room().enqueue(new Callback<BaseModel<IndexRecommendRoom>>() {
@Override
public void onResponse(Call<BaseModel<IndexRecommendRoom>> call, Response<BaseModel<IndexRecommendRoom>> response) {
if (response.code() == 200) {
BaseModel<IndexRecommendRoom> 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<BaseModel<IndexRecommendRoom>> call, Throwable t) {
LogUtils.e("首页房间推荐",t.fillInStackTrace());
}
});
}
public void wallet(BaseObserver<WalletBean> observer) { public void wallet(BaseObserver<WalletBean> observer) {
sApiServer.wallet().enqueue(new Callback<BaseModel<WalletBean>>() { sApiServer.wallet().enqueue(new Callback<BaseModel<WalletBean>>() {
@Override @Override
@@ -3847,8 +3911,8 @@ public class RetrofitClient {
}); });
} }
public void cancel(BaseObserver<String> observer) { public void cancel(String sms_code,BaseObserver<String> observer) {
sApiServer.cancel(SpUtil.getToken()).enqueue(new Callback<BaseModel<String>>() { sApiServer.cancel(SpUtil.getToken(),sms_code).enqueue(new Callback<BaseModel<String>>() {
@Override @Override
public void onResponse(Call<BaseModel<String>> call, Response<BaseModel<String>> response) { public void onResponse(Call<BaseModel<String>> call, Response<BaseModel<String>> response) {

View File

@@ -335,6 +335,7 @@ public class Constants {
public static final String POST_AUCTION_MODE = "/api/RoomAuction/room_auction_mode";//修改房间竞拍模式 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 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 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_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 POST_SEND_PK = "/api/RoomPk/send_pk";//发起PK邀请
public static final String ACCEPT_PK = "/api/RoomPk/accept_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_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_NEW_CHARGE_GIFT = "/api/Activities/new_charge_gift";//新人好礼列表接口(弹框)
public static final String GET_ACTIVITIES_PERMISSION = "/api/Activities/activities_permission";//活动弹框权限 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 GET_DAY_DROP_GIFT = "/api/Activities/day_drop_gift";//天降好礼列表接口(弹框)
public static final String dailyTasksReceive = "/api/Dailytasks/dailyTasksReceive";//领取每日任务奖励 public static final String dailyTasksReceive = "/api/Dailytasks/dailyTasksReceive";//领取每日任务奖励
public static final String postRoomSwToken = "/api/Room/update_user_sw_token";//获取用户声网token public static final String postRoomSwToken = "/api/Room/update_user_sw_token";//获取用户声网token

View File

@@ -137,11 +137,11 @@ public class PictureSelectorUtil {
public UCrop.Options buildOptions() { public UCrop.Options buildOptions() {
UCrop.Options options = new UCrop.Options(); UCrop.Options options = new UCrop.Options();
options.setHideBottomControls(true);//是否显示裁剪 options.setHideBottomControls(true);//是否显示裁剪
options.setFreeStyleCropEnabled(true);//裁剪是否可以拖动 options.setFreeStyleCropEnabled(false);//裁剪是否可以拖动
options.setShowCropFrame(true);//是否显示裁剪边缘 options.setShowCropFrame(true);//是否显示裁剪边缘
options.setShowCropGrid(true);//是否显示裁剪网格 options.setShowCropGrid(true);//是否显示裁剪网格
options.setCircleDimmedLayer(false);//圆形头像裁剪 options.setCircleDimmedLayer(false);//圆形头像裁剪
options.withAspectRatio(1, 1); options.withAspectRatio(1, 1);//裁剪比例
options.isCropDragSmoothToCenter(false); options.isCropDragSmoothToCenter(false);
options.isForbidCropGifWebp(false); options.isForbidCropGifWebp(false);
options.isForbidSkipMultipleCrop(true); options.isForbidSkipMultipleCrop(true);

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -1,14 +1,22 @@
package com.xscm.modulemain package com.xscm.modulemain
import android.app.Activity
import android.content.Context import android.content.Context
import com.blankj.utilcode.util.AppUtils
import com.blankj.utilcode.util.CrashUtils import com.blankj.utilcode.util.CrashUtils
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.Utils
import com.opensource.svgaplayer.utils.log.SVGALogger import com.opensource.svgaplayer.utils.log.SVGALogger
import com.scwang.smartrefresh.layout.SmartRefreshLayout import com.scwang.smartrefresh.layout.SmartRefreshLayout
import com.scwang.smartrefresh.layout.footer.ClassicsFooter import com.scwang.smartrefresh.layout.footer.ClassicsFooter
import com.scwang.smartrefresh.layout.header.ClassicsHeader import com.scwang.smartrefresh.layout.header.ClassicsHeader
import com.xscm.modulemain.dialog.InviteDialog
import com.xscm.modulemain.widget.WheatLayoutSingManager import com.xscm.modulemain.widget.WheatLayoutSingManager
import com.xscm.moduleutil.base.CommonAppContext 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() { open class Application : CommonAppContext() {
@@ -19,6 +27,7 @@ open class Application : CommonAppContext() {
var CRASHUTILS_SAVE_PATH = "" var CRASHUTILS_SAVE_PATH = ""
var isAgoraStop = false var isAgoraStop = false
var inviteDialog: InviteDialog? = null
// 单例实例 // 单例实例
companion object { companion object {
@@ -55,6 +64,33 @@ open class Application : CommonAppContext() {
initLogUtils() initLogUtils()
initCrashUtils() initCrashUtils()
initSmartRefreshLayout() initSmartRefreshLayout()
AppUtils.registerAppStatusChangedListener(object : Utils.OnAppStatusChangedListener {
override fun onForeground(activity: Activity?) {//应用切换到前台
if (!CommonAppContext.getInstance().isPlaying) {
RetrofitClient.getInstance()
.index_recommend_room(object : BaseObserver<IndexRecommendRoom>() {
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() { private fun initLogUtils() {

View File

@@ -1,14 +1,25 @@
package com.xscm.modulemain.activity.login.activity; package com.xscm.modulemain.activity.login.activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; 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.basic.PictureSelector;
import com.luck.picture.lib.config.PictureConfig; 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.entity.LocalMedia;
import com.luck.picture.lib.style.PictureSelectorStyle; import com.luck.picture.lib.style.PictureSelectorStyle;
import com.xscm.modulemain.R; 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.PermissionDescriptionHelper;
import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.widget.Constants; 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 org.greenrobot.eventbus.EventBus;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -196,18 +211,65 @@ public class ImproveInfoActivity extends BaseMvpActivity<ImproveInfoPresenter, A
private void startChoosePhoto(int mimeType, int requestCode) { private void startChoosePhoto(int mimeType, int requestCode) {
// PictureSelector.create(this)
// .openGallery(mimeType)
// .setSelectorUIStyle(new PictureSelectorStyle())
// .isGif(false)
// .setImageEngine(GlideEngine.createGlideEngine())
// .setPermissionDescriptionListener(PermissionDescriptionHelper.createListener())
// .setMaxSelectNum(1)
// .isPreviewImage(true)
// .isDisplayCamera(false)
// .setOutputCameraDir(Constants.FILE_PATH)
// .isOriginalSkipCompress(true)
// .forResult(requestCode); //结果回调onActivityResult code
PictureSelectorUtil pictureSelectorUtil = new PictureSelectorUtil();
PictureSelector.create(this) PictureSelector.create(this)
.openGallery(mimeType) .openGallery(mimeType)
.setSelectorUIStyle(new PictureSelectorStyle())
.isGif(false) .isGif(false)
.setImageEngine(GlideEngine.createGlideEngine())
.setPermissionDescriptionListener(PermissionDescriptionHelper.createListener())
.setMaxSelectNum(1) .setMaxSelectNum(1)
.isPreviewImage(true) .isPreviewImage(false)
.isDisplayCamera(false) .isDisplayCamera(false)
.setOutputCameraDir(Constants.FILE_PATH) .setImageEngine(GlideEngine.createGlideEngine())
.isOriginalSkipCompress(true) .setImageEngine(GlideEngine.createGlideEngine()) // 选择器展示不出图片则添加
.forResult(requestCode); //结果回调onActivityResult code .setPermissionDescriptionListener(PermissionDescriptionHelper.createListener())
.setCropEngine(new CropFileEngine() {
@Override
public void onStartCrop(Fragment fragment, Uri srcUri, Uri destinationUri, ArrayList<String> 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<Bitmap> call) {
Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight).into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @org.jetbrains.annotations.Nullable Transition<? super Bitmap> 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);
} }

View File

@@ -58,12 +58,14 @@ import com.xscm.moduleutil.bean.AppUpdateModel;
import com.xscm.moduleutil.bean.FirstChargeBean; import com.xscm.moduleutil.bean.FirstChargeBean;
import com.xscm.moduleutil.bean.FirstChargeGiftBean; import com.xscm.moduleutil.bean.FirstChargeGiftBean;
import com.xscm.moduleutil.bean.HeavenGiftBean; import com.xscm.moduleutil.bean.HeavenGiftBean;
import com.xscm.moduleutil.bean.IndexRecommendRoom;
import com.xscm.moduleutil.bean.PermissionPicBean; import com.xscm.moduleutil.bean.PermissionPicBean;
import com.xscm.moduleutil.bean.ThemeBean; import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.room.RoomOnline; import com.xscm.moduleutil.bean.room.RoomOnline;
import com.xscm.moduleutil.bean.room.RoomOnlineBean; import com.xscm.moduleutil.bean.room.RoomOnlineBean;
import com.xscm.moduleutil.dialog.FirstChargeDialog; import com.xscm.moduleutil.dialog.FirstChargeDialog;
import com.xscm.moduleutil.dialog.HeavenGiftDialog; import com.xscm.moduleutil.dialog.HeavenGiftDialog;
import com.xscm.modulemain.dialog.InviteDialog;
import com.xscm.moduleutil.dialog.NewPeopleDialog; import com.xscm.moduleutil.dialog.NewPeopleDialog;
import com.xscm.moduleutil.dialog.RechargeDialogFragment; import com.xscm.moduleutil.dialog.RechargeDialogFragment;
import com.xscm.moduleutil.event.RoomOutEvent; import com.xscm.moduleutil.event.RoomOutEvent;
@@ -91,6 +93,7 @@ import java.util.concurrent.TimeUnit;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
@Route(path = ARouteConstants.ME) @Route(path = ARouteConstants.ME)
public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBinding> public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBinding>
implements HomeContacts.View, View.OnClickListener, LocationProvider.LocationCallback { implements HomeContacts.View, View.OnClickListener, LocationProvider.LocationCallback {
@@ -114,6 +117,8 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
private int selectedTextColor = 0; // 选中文字颜色 (从服务器获取) private int selectedTextColor = 0; // 选中文字颜色 (从服务器获取)
private int unselectedTextColor = 0; // 未选中文字颜色 (从服务器获取) private int unselectedTextColor = 0; // 未选中文字颜色 (从服务器获取)
private InviteDialog inviteDialog;
@Override @Override
protected int getLayoutId() { protected int getLayoutId() {
return R.layout.activity_main; return R.layout.activity_main;
@@ -494,6 +499,7 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
MvpPre.activitiesPermission();//获取悬浮框权限 MvpPre.activitiesPermission();//获取悬浮框权限
} }
private void requestGpsPermissions() { private void requestGpsPermissions() {
@@ -637,6 +643,12 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
CommonAppContext.getInstance().onAppForeground(); CommonAppContext.getInstance().onAppForeground();
} }
public void dialogUp(){
if (!CommonAppContext.getInstance().isPlaying) {
MvpPre.index_recommend_room();
}
}
private final Runnable mRivAnimationTask = () -> { private final Runnable mRivAnimationTask = () -> {
Animation rivRotateAnimation = AnimationUtils.loadAnimation(MainActivity.this, com.xscm.moduleutil.R.anim.rotate_anim); Animation rivRotateAnimation = AnimationUtils.loadAnimation(MainActivity.this, com.xscm.moduleutil.R.anim.rotate_anim);
mBinding.riv.startAnimation(rivRotateAnimation); mBinding.riv.startAnimation(rivRotateAnimation);
@@ -768,6 +780,10 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
BackgroundManager.getInstance().setBackgroundUrl(themeBean.getApp_bg()); BackgroundManager.getInstance().setBackgroundUrl(themeBean.getApp_bg());
loadNetworkBackground(); loadNetworkBackground();
} }
if (themeBean.getTheme_color() != null) {
ColorManager.getInstance().updateColors(themeBean.getTheme_color(), themeBean.getBtn_text_color());
}
} }
} }
@@ -864,12 +880,22 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
} }
} }
}); });
}else { } else {
mBinding.dvr.setVisibility(View.GONE); mBinding.dvr.setVisibility(View.GONE);
} }
} }
@Override
public void index_recommend_room(IndexRecommendRoom indexRecommendRoom) {
if (indexRecommendRoom != null) {
inviteDialog = new InviteDialog(this, indexRecommendRoom);
inviteDialog.setData(indexRecommendRoom);
inviteDialog.show();
}
}
// TODO: 2025/10/12 天降好礼 // TODO: 2025/10/12 天降好礼
private void heavenGiftDialog() { private void heavenGiftDialog() {
HeavenGiftDialog heavenGiftDialog = new HeavenGiftDialog(this); HeavenGiftDialog heavenGiftDialog = new HeavenGiftDialog(this);

View File

@@ -33,6 +33,8 @@ public final class HomeContacts {
void activitiesPermissionSuccess(ActivitiesPermission activitiesPermission); void activitiesPermissionSuccess(ActivitiesPermission activitiesPermission);
void index_recommend_room(IndexRecommendRoom indexRecommendRoom);
} }
public interface IHomePre extends IPresenter { public interface IHomePre extends IPresenter {
@@ -61,6 +63,7 @@ public final class HomeContacts {
void getRoomOnline(String roomId, String page, String page_limit);//在线列表 void getRoomOnline(String roomId, String page, String page_limit);//在线列表
void activitiesPermission();//活动弹框权限 void activitiesPermission();//活动弹框权限
void index_recommend_room();//首页推荐房间
} }
} }

View File

@@ -414,4 +414,22 @@ public class HomePresenter extends BasePresenter<HomeContacts.View> implements H
}); });
} }
@Override
public void index_recommend_room() {
api.index_recommend_room(new BaseObserver<IndexRecommendRoom>() {
@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);
}
});
}
} }

View File

@@ -61,32 +61,32 @@ public class OfficialNoticeActivity extends BaseMvpActivity<NewsPresenter, Activ
protected void convert(BaseViewHolder helper, NewsMessageList item) { protected void convert(BaseViewHolder helper, NewsMessageList item) {
String time = TimeUtils.getDateToStringNoZ(Long.parseLong(item.getCreatetime()) * 1000L); String time = TimeUtils.getDateToStringNoZ(Long.parseLong(item.getCreatetime()) * 1000L);
helper.setText(R.id.tv_sys_time, time); helper.setText(R.id.tv_sys_time, time);
// TODO: 2025/12/8 type==6是工会邀请 type=7是公会调整用户益调消息
if (item.getType() == 6) { if (item.getType() == 6 || item.getType() == 7) {
helper.getView(R.id.ll_system).setVisibility(GONE); helper.getView(R.id.ll_system).setVisibility(GONE);
helper.getView(R.id.ll_gh).setVisibility(VISIBLE); helper.getView(R.id.ll_gh).setVisibility(VISIBLE);
helper.setText(R.id.tv_sys_cons, item.getContent()); helper.setText(R.id.tv_sys_cons, item.getContent());
if (item.getGuild_invited_status()==0){ if (item.getGuild_invited_status() == 0) {
helper.getView(R.id.ll_but).setVisibility(VISIBLE); helper.getView(R.id.ll_but).setVisibility(VISIBLE);
helper.getView(R.id.tv_cancel2).setVisibility(GONE); helper.getView(R.id.tv_cancel2).setVisibility(GONE);
}else if (item.getGuild_invited_status()==1){ } else if (item.getGuild_invited_status() == 1) {
helper.getView(R.id.ll_but).setVisibility(GONE); helper.getView(R.id.ll_but).setVisibility(GONE);
helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE); helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE);
helper.setText(R.id.tv_cancel2,"已同意"); helper.setText(R.id.tv_cancel2, "已同意");
}else if (item.getGuild_invited_status()==2){ } else if (item.getGuild_invited_status() == 2) {
helper.getView(R.id.ll_but).setVisibility(GONE); helper.getView(R.id.ll_but).setVisibility(GONE);
helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE); helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE);
helper.setText(R.id.tv_cancel2,"已拒绝"); helper.setText(R.id.tv_cancel2, "已拒绝");
} }
helper.getView(R.id.tv_cancel).setOnClickListener(new View.OnClickListener() { helper.getView(R.id.tv_cancel).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
MvpPre.postInvite(item.getId()+"","2"); MvpPre.postInvite(item.getId() + "", "2");
helper.getView(R.id.ll_but).setVisibility(GONE); helper.getView(R.id.ll_but).setVisibility(GONE);
helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE); helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE);
helper.setText(R.id.tv_cancel2,"已拒绝"); helper.setText(R.id.tv_cancel2, "已拒绝");
} }
}); });
@@ -94,11 +94,11 @@ public class OfficialNoticeActivity extends BaseMvpActivity<NewsPresenter, Activ
@Override @Override
public void onClick(View v) { public void onClick(View v) {
MvpPre.postInvite(item.getId()+"","1"); MvpPre.postInvite(item.getId() + "", "1");
helper.getView(R.id.ll_but).setVisibility(GONE); helper.getView(R.id.ll_but).setVisibility(GONE);
helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE); helper.getView(R.id.tv_cancel2).setVisibility(VISIBLE);
helper.setText(R.id.tv_cancel2,"已同意"); helper.setText(R.id.tv_cancel2, "已同意");
MvpPre.getMessagetitle(type, "1", "10");
} }
}); });
@@ -174,6 +174,6 @@ public class OfficialNoticeActivity extends BaseMvpActivity<NewsPresenter, Activ
@Override @Override
public void postInvite() { public void postInvite() {
MvpPre.getMessagetitle(type, "1", "10");
} }
} }

View File

@@ -339,11 +339,18 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
public void onTabReselected(TabLayout.Tab tab) { public void onTabReselected(TabLayout.Tab tab) {
} }
}); });
// TODO: 2025/12/8 根据传递的参数, default_index,展示默认显示的位置默认是0有值的事1
// 设置默认选中的标签
if (mBinding.slidingTabLayout.getTabCount() > 0) { if (mBinding.slidingTabLayout.getTabCount() > 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 @Override

View File

@@ -8,8 +8,10 @@ import android.view.View;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.launcher.ARouter; import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.ToastUtils; import com.blankj.utilcode.util.ToastUtils;
import com.xscm.modulemain.R; 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.RankingListActivity;
import com.xscm.modulemain.activity.room.activity.SearchActivity; import com.xscm.modulemain.activity.room.activity.SearchActivity;
import com.xscm.modulemain.activity.room.contacts.VoiceContacts; import com.xscm.modulemain.activity.room.contacts.VoiceContacts;
@@ -99,7 +101,6 @@ public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoice
MvpPre.activitiesPermission(); MvpPre.activitiesPermission();
// 在这里可以继续显示其他弹窗,如首充弹窗 // 在这里可以继续显示其他弹窗,如首充弹窗
} }
}); });
} }
@@ -111,8 +112,10 @@ public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoice
firstChargeDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { firstChargeDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override @Override
public void onDismiss(DialogInterface dialog) { public void onDismiss(DialogInterface dialog) {
setDialog();
//首充弹窗关闭后,弹首充 //首充弹窗关闭后,弹首充
dialog.dismiss(); dialog.dismiss();
} }
}); });
@@ -168,7 +171,15 @@ public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoice
if (activitiesPermission != null) { if (activitiesPermission != null) {
if (activitiesPermission.getFirst_charge_permission() == 1) { if (activitiesPermission.getFirst_charge_permission() == 1) {
firstCharge(); firstCharge();
}else if (activitiesPermission.getFirst_charge_permission() == 0) {
setDialog();
} }
} }
} }
private void setDialog(){
if(ActivityUtils.getTopActivity() instanceof MainActivity){
((MainActivity)ActivityUtils.getTopActivity()).dialogUp();
}
}
} }

View File

@@ -270,8 +270,8 @@ public class MyRoomActivity extends BaseMvpActivity<MyRoomPresenter, RoomActivit
ARouter.getInstance().build(ARouteConstants.REAL_NAME_ACTIVITY2).navigation(); ARouter.getInstance().build(ARouteConstants.REAL_NAME_ACTIVITY2).navigation();
return; return;
} }
startActivity(new Intent(MyRoomActivity.this, CreatedRoomActivity.class));
finish(); MvpPre.check_create_room();
} }
}); });
} }
@@ -317,6 +317,12 @@ public class MyRoomActivity extends BaseMvpActivity<MyRoomPresenter, RoomActivit
} }
@Override
public void check_create_room() {
startActivity(new Intent(MyRoomActivity.this, CreatedRoomActivity.class));
finish();
}
private static class MyFragmentAdapter extends FragmentStatePagerAdapter { private static class MyFragmentAdapter extends FragmentStatePagerAdapter {
private SparseArray<Fragment> fragments = new SparseArray<>(); private SparseArray<Fragment> fragments = new SparseArray<>();
private String[] titles = new String[]{"我创建的", "我主持的", "我管理的", "我关注的"}; private String[] titles = new String[]{"我创建的", "我主持的", "我管理的", "我关注的"};

View File

@@ -4,8 +4,15 @@ import android.annotation.SuppressLint;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.CountDownTimer;
import android.os.Handler; import android.os.Handler;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View; import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
@@ -24,8 +31,10 @@ import com.xscm.modulemain.databinding.ActivitySettingBinding;
import com.xscm.modulemain.dialog.YouthModelDialog; import com.xscm.modulemain.dialog.YouthModelDialog;
import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.UserInfo; import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.dialog.RealNameDialog; import com.xscm.moduleutil.dialog.RealNameDialog;
import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.widget.CommonAppConfig; import com.xscm.moduleutil.widget.CommonAppConfig;
@@ -39,9 +48,9 @@ import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
/** /**
*@author qx * @author qx
*@data 2025/8/14 * @data 2025/8/14
*@description: 设置 * @description: 设置
*/ */
public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivitySettingBinding> implements SettingConacts.View { public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivitySettingBinding> implements SettingConacts.View {
@@ -64,9 +73,9 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
if (userInfo != null) { if (userInfo != null) {
if (userInfo.getIs_hide() != null && userInfo.getIs_hide().equals("1")) { if (userInfo.getIs_hide() != null && userInfo.getIs_hide().equals("1")) {
mBinding.llQhdz.setVisibility(View.VISIBLE); mBinding.llQhdz.setVisibility(View.VISIBLE);
if (userInfo.getHide_status()!=null && userInfo.getHide_status().equals("1")){ if (userInfo.getHide_status() != null && userInfo.getHide_status().equals("1")) {
mBinding.swit.setChecked(true); mBinding.swit.setChecked(true);
}else { } else {
mBinding.swit.setChecked(false); mBinding.swit.setChecked(false);
} }
} else { } else {
@@ -178,7 +187,7 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
.setPositiveButton("确定", new DialogInterface.OnClickListener() { .setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
if (MvpPre == null){ if (MvpPre == null) {
MvpPre = bindPresenter(); MvpPre = bindPresenter();
} }
@@ -193,23 +202,28 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
} }
}) })
.setNegativeButton("取消", null).create().show(); .setNegativeButton("取消", null).create().show();
}else if (id == R.id.ll_zhxiao){ } else if (id == R.id.ll_zhxiao) {
new AlertDialog.Builder(this).setMessage("确定要注销账号吗?") new AlertDialog.Builder(this).setMessage("确定要注销账号吗?")
.setMessage("注销后您当前的账户金币及钻石将无法找回,\n 30天内本账号将无法登陆请谨慎操作") .setMessage("注销后您当前的账户金币及钻石将无法找回,\n 30天内本账号将无法登陆请谨慎操作")
.setPositiveButton("确定", new DialogInterface.OnClickListener() { .setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
if (MvpPre==null){ if( SpUtil.getUserBean().getMobile()==null){
MvpPre=bindPresenter(); if (MvpPre == null) {
MvpPre = bindPresenter();
}
MvpPre.cancel("");
}else {
showSecondaryVerificationDialog();
} }
MvpPre.cancel();
} }
}) })
.setNegativeButton("取消", null).create().show(); .setNegativeButton("取消", null).create().show();
}else if (id == R.id.ll_gywm){ } else if (id == R.id.ll_gywm) {
startActivity(new Intent(this, AboutUsActivity.class)); startActivity(new Intent(this, AboutUsActivity.class));
} else if (id == R.id.ll_bbh) { } else if (id == R.id.ll_bbh) {
if (SpUtil.getShelf()==1) { if (SpUtil.getShelf() == 1) {
// 移除之前的重置任务 // 移除之前的重置任务
handler.removeCallbacks(resetRunnable); handler.removeCallbacks(resetRunnable);
clickCount++; clickCount++;
@@ -223,9 +237,9 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
handler.postDelayed(resetRunnable, RESET_DELAY); handler.postDelayed(resetRunnable, RESET_DELAY);
} }
} }
}else if (id == R.id.ll_send_log){ } else if (id == R.id.ll_send_log) {
MvpPre.sendAppLog(); MvpPre.sendAppLog();
}else if (id == R.id.tv_share) { } else if (id == R.id.tv_share) {
// showLoading("正在生成分享文件..."); // showLoading("正在生成分享文件...");
// Observable.create(new ObservableOnSubscribe<Boolean>() { // Observable.create(new ObservableOnSubscribe<Boolean>() {
// @SuppressLint("CheckResult") // @SuppressLint("CheckResult")
@@ -273,6 +287,110 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
} }
LogUtils.e("点击了~" + viewName); LogUtils.e("点击了~" + viewName);
} }
private void showSecondaryVerificationDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
View dialogView = getLayoutInflater().inflate(R.layout.dialog_secondary_verification, null);
builder.setView(dialogView);
final EditText etVerificationCode = dialogView.findViewById(R.id.ed_password);
final ImageView tvGetCode = dialogView.findViewById(R.id.tv_get_code);
final TextView tvCancel = dialogView.findViewById(R.id.tv_send_code);
final TextView tvConfirm = dialogView.findViewById(R.id.tv_confirm);
ThemeableDrawableUtils.setThemeableRoundedBackground(tvConfirm, ColorManager.getInstance().getPrimaryColorInt(), 53);
tvConfirm.setTextColor(ColorManager.getInstance().getButtonColorInt());
final AlertDialog dialog = builder.create();
dialog.setCancelable(false);
dialog.show();
tvCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MvpPre.sendCode(SpUtil.getUserBean().getMobile(), 5);
com.hjq.toast.ToastUtils.show("验证码已发送");
tvCancel.setEnabled(false);
startCountDown(tvCancel);
}
});
tvGetCode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 模拟发送验证码逻辑
dialog.dismiss();
}
});
tvConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String code = etVerificationCode.getText().toString().trim();
if (!TextUtils.isEmpty(code) && code.length() >= 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() { private void showYouthModelDialog() {
YouthModelDialog youthModelDialog = new YouthModelDialog(this, null); YouthModelDialog youthModelDialog = new YouthModelDialog(this, null);
youthModelDialog.show(); youthModelDialog.show();
@@ -286,6 +404,7 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
} }
}); });
} }
@Override @Override
protected int getLayoutId() { protected int getLayoutId() {
return R.layout.activity_setting; return R.layout.activity_setting;

View File

@@ -204,7 +204,9 @@ public class WithdrawalActivity extends BaseMvpActivity<WithdrawalPresenter, Act
final EditText etVerificationCode = dialogView.findViewById(R.id.ed_password); final EditText etVerificationCode = dialogView.findViewById(R.id.ed_password);
final ImageView tvGetCode = dialogView.findViewById(R.id.tv_get_code); final ImageView tvGetCode = dialogView.findViewById(R.id.tv_get_code);
final TextView tvCancel = dialogView.findViewById(R.id.tv_send_code); final TextView tvCancel = dialogView.findViewById(R.id.tv_send_code);
final TextView tvConfirm=dialogView.findViewById(R.id.tv_confirm);
ThemeableDrawableUtils.setThemeableRoundedBackground(tvConfirm, ColorManager.getInstance().getPrimaryColorInt(), 53);
tvConfirm.setTextColor(ColorManager.getInstance().getButtonColorInt());
final AlertDialog dialog = builder.create(); final AlertDialog dialog = builder.create();
dialog.setCancelable(false); dialog.setCancelable(false);
dialog.show(); dialog.show();
@@ -228,6 +230,20 @@ public class WithdrawalActivity extends BaseMvpActivity<WithdrawalPresenter, Act
} }
}); });
tvConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String code = etVerificationCode.getText().toString().trim();
if (!TextUtils.isEmpty(code) && code.length() >= 6) {
// 验证码验证逻辑
MvpPre.withdrawal(mBinding.etCustomAmount.getText().toString(), selectedItem.getType(), code);
dialog.dismiss();
}else {
com.hjq.toast.ToastUtils.show("请输入正确的验证码");
}
}
});
// // 验证码输入完成时的处理 // // 验证码输入完成时的处理
// etVerificationCode.setOnEditorActionListener(new TextView.OnEditorActionListener() { // etVerificationCode.setOnEditorActionListener(new TextView.OnEditorActionListener() {
// @Override // @Override
@@ -258,12 +274,7 @@ public class WithdrawalActivity extends BaseMvpActivity<WithdrawalPresenter, Act
@Override @Override
public void afterTextChanged(Editable s) { public void afterTextChanged(Editable s) {
String code = etVerificationCode.getText().toString().trim();
if (!TextUtils.isEmpty(code) && code.length() >= 6) {
// 验证码验证逻辑
MvpPre.withdrawal(mBinding.etCustomAmount.getText().toString(), selectedItem.getType(), code);
dialog.dismiss();
}
} }
}); });
} }

View File

@@ -30,6 +30,8 @@ public final class MyRoomListContacts {
void setAttentionListData(List<AttentionResp> attentionResps); void setAttentionListData(List<AttentionResp> attentionResps);
void myCpRoom(List<MyCpRoom> list); void myCpRoom(List<MyCpRoom> list);
void check_create_room();
} }
public interface IRankingListPre extends IPresenter { public interface IRankingListPre extends IPresenter {
@@ -49,6 +51,9 @@ public final class MyRoomListContacts {
void getAttentionList(); void getAttentionList();
void myCpRoom(); void myCpRoom();
void check_create_room();
} }
public interface DeatilsView extends IView<Activity> { public interface DeatilsView extends IView<Activity> {

View File

@@ -14,10 +14,12 @@ public class SettingConacts {
public interface IMePre extends IPresenter { public interface IMePre extends IPresenter {
void clearLoginInfo(); void clearLoginInfo();
void cancel(); void cancel(String sms_code);
void getModifyHideStatus(String hide_status); void getModifyHideStatus(String hide_status);
void sendAppLog(); void sendAppLog();
void sendCode(String phoneNumber,int type);
} }
} }

View File

@@ -179,4 +179,9 @@ public class MyCreateFragment extends BaseMvpFragment<MyRoomPresenter, RoomFragm
MvpPre.getMyFoot(1); MvpPre.getMyFoot(1);
adapter.submitList(viewItems); adapter.submitList(viewItems);
} }
@Override
public void check_create_room() {
}
} }

View File

@@ -152,4 +152,9 @@ public class MyFollowFragment extends BaseMvpFragment<MyRoomPresenter, RoomFragm
public void myCpRoom(List<MyCpRoom> list) { public void myCpRoom(List<MyCpRoom> list) {
} }
@Override
public void check_create_room() {
}
} }

View File

@@ -157,4 +157,9 @@ public class MyManageFragment extends BaseMvpFragment<MyRoomPresenter, RoomFragm
public void myCpRoom(List<MyCpRoom> list) { public void myCpRoom(List<MyCpRoom> list) {
} }
@Override
public void check_create_room() {
}
} }

View File

@@ -251,4 +251,9 @@ public class MyRoomListFragment extends BaseMvpFragment<MyRoomPresenter, RoomFra
} }
@Override
public void check_create_room() {
}
} }

View File

@@ -202,4 +202,19 @@ public class MyRoomPresenter extends BasePresenter<MyRoomListContacts.View> impl
} }
}); });
} }
@Override
public void check_create_room() {
api.check_create_room(new BaseObserver<String>(){
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
}
});
}
} }

View File

@@ -58,8 +58,8 @@ public class SettingPresenter extends BasePresenter<SettingConacts.View> impleme
} }
@Override @Override
public void cancel() { public void cancel(String sms_code) {
api.cancel(new BaseObserver<String>() { api.cancel(sms_code,new BaseObserver<String>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
@@ -176,4 +176,21 @@ public class SettingPresenter extends BasePresenter<SettingConacts.View> impleme
} }
}); });
} }
@Override
public void sendCode(String phoneNumber, int type) {
api.sendCode(phoneNumber, type + "", new BaseObserver<Object>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(Object o) {
}
});
}
} }

View File

@@ -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<DialogInviteBinding>(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()
}
}

View File

@@ -13,28 +13,33 @@
<ImageView <ImageView
android:id="@+id/iv_bg" android:id="@+id/iv_bg"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:scaleType="fitXY" android:scaleType="fitXY"
android:src="@mipmap/invite_bj" android:src="@mipmap/invite_bj"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="275:180"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<com.makeramen.roundedimageview.RoundedImageView <com.xscm.moduleutil.widget.CircularImage
android:id="@+id/invite_pic" android:id="@+id/invite_pic"
android:layout_width="@dimen/dp_70" android:layout_width="@dimen/dp_65"
android:layout_height="@dimen/dp_70" android:layout_height="@dimen/dp_65"
android:layout_marginTop="@dimen/dp_12" android:layout_marginTop="@dimen/dp_12"
android:background="@mipmap/invite_tx"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/iv_bg" app:layout_constraintTop_toTopOf="@id/iv_bg"
app:riv_border_color="@color/color_white" />
app:riv_border_width="1dp"
app:riv_corner_radius="50dp" <ImageView
app:riv_mutate_background="true" /> android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_70"
android:layout_marginTop="@dimen/dp_12"
android:src="@mipmap/invite_tx"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/iv_bg"
/>
<TextView <TextView
android:id="@+id/tv_c" android:id="@+id/tv_c"
@@ -62,7 +67,8 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/iv_bg" app:layout_constraintBottom_toBottomOf="@+id/iv_bg"
app:layout_constraintTop_toBottomOf="@+id/tv_c" /> app:layout_constraintTop_toBottomOf="@+id/tv_c"
android:visibility="gone"/>
<ImageView <ImageView
@@ -73,9 +79,53 @@
android:src="@mipmap/index_close_youth" android:src="@mipmap/index_close_youth"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_bg" /> app:layout_constraintTop_toBottomOf="@+id/iv_bg"
android:visibility="gone"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:padding="@dimen/dp_5"
android:layout_marginBottom="@dimen/dp_13"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/iv_bg"
app:layout_constraintTop_toBottomOf="@+id/tv_c"
>
<Button
android:id="@+id/btn_negative"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_42"
android:layout_centerInParent="true"
android:layout_alignParentStart="true"
android:layout_marginStart="@dimen/dp_20"
android:text="拒接"
android:gravity="center"
android:textSize="@dimen/sp_14"
android:paddingHorizontal="@dimen/dp_20"
android:paddingVertical="@dimen/dp_10"
android:textColor="@color/color_FF999999"
android:background="@drawable/bg_r53_f3f3f3"
/>
<Button
android:id="@+id/btn_positive"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_42"
android:layout_centerInParent="true"
android:layout_alignParentEnd="true"
android:paddingHorizontal="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_22"
android:paddingVertical="@dimen/dp_10"
android:text="接受"
android:textSize="@dimen/sp_14"
android:gravity="center"
android:background="@drawable/cs"/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>

View File

@@ -12,7 +12,11 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/bg_r16_fff" android:background="@drawable/bg_r16_fff"
app:layout_constraintTop_toTopOf="parent"> android:layout_marginTop="@dimen/dp_10"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
>
<TextView <TextView
@@ -42,10 +46,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_44" android:layout_height="@dimen/dp_44"
android:layout_marginLeft="@dimen/dp_10" android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_36" android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10" android:layout_marginRight="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_36"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/bg_r16_ffeff2f8" android:background="@drawable/bg_r16_ffeff2f8"
app:layout_constraintTop_toBottomOf="@+id/tv_title"> app:layout_constraintTop_toBottomOf="@+id/tv_title">
@@ -94,5 +96,24 @@
</LinearLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:background="@drawable/cs"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@+id/rl_code"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="@dimen/dp_10"
android:text="确认"
android:textColor="#000"
android:textSize="@dimen/sp_15"
android:padding="10dp"
android:gravity="center"
app:layout_constraintWidth_percent="0.7"
android:id="@+id/tv_confirm" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>