添加log and crash 保存本地,分享。

This commit is contained in:
2025-11-11 10:48:20 +08:00
parent 0aca66ce84
commit 8d983bfa99
20 changed files with 231 additions and 130 deletions

View File

@@ -51,7 +51,6 @@ public class MyConverterFactory extends Converter.Factory {
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type)); TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
return new ResponseBodyConverter<>(gson, adapter); return new ResponseBodyConverter<>(gson, adapter);
// return new ResponseBodyConverter<>(gson, TypeToken.get(type));
} }
} }

View File

@@ -109,7 +109,6 @@ public class RetrofitClient {
sslContext.init(null, new TrustManager[]{trustAllCert}, new SecureRandom()); sslContext.init(null, new TrustManager[]{trustAllCert}, new SecureRandom());
final OkHttpClient client = new OkHttpClient.Builder() final OkHttpClient client = new OkHttpClient.Builder()
// .addInterceptor(new LogInterceptor())
.addInterceptor(new DataLoggingInterceptor(new DataLogger())) .addInterceptor(new DataLoggingInterceptor(new DataLogger()))
.addInterceptor(new AccessTokenInterceptor(headers)) .addInterceptor(new AccessTokenInterceptor(headers))
.proxy(Proxy.NO_PROXY) .proxy(Proxy.NO_PROXY)
@@ -129,31 +128,15 @@ public class RetrofitClient {
private Retrofit provideRetrofit(OkHttpClient client) { private Retrofit provideRetrofit(OkHttpClient client) {
return new Retrofit.Builder() return new Retrofit.Builder()
.addConverterFactory(MyConverterFactory.create())/**/ .addConverterFactory(MyConverterFactory.create())
// .addConverterFactory(GsonConverterFactory.create()) // .addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
// .baseUrl("http://chat.qxmier.com/") // .baseUrl("http://chat.qxmier.com/")
.baseUrl(CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl()) .baseUrl(CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl())
.client(client) .client(client)
.build(); .build();
} }
// private static Retrofit mRainRetrofit;
//
// public static Retrofit getRainRetrofit() {
// if (mRainRetrofit == null) {
// synchronized (RetrofitClient.class) {
// mRainRetrofit = new Retrofit.Builder()
// .addConverterFactory(RainConverterFactory.create())
// .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
// .baseUrl(BuildConfig.RAIN_GAME_BASE_URL)
// .client(client)
// .build();
// }
// }
// return mRainRetrofit;
// }
private RetrofitClient() { private RetrofitClient() {
mRetrofit = provideRetrofit(provideOkHttpClient()); mRetrofit = provideRetrofit(provideOkHttpClient());
@@ -201,11 +184,6 @@ public class RetrofitClient {
return mRetrofit.create(apiClientClass); return mRetrofit.create(apiClientClass);
} }
public void login() {
// login("18473492252", "123456");
// login("18229732986", "123456");
}
public void appUpdate(BaseObserver<AppUpdateModel> observer) { public void appUpdate(BaseObserver<AppUpdateModel> observer) {
sApiServer.appUpdate().compose(new DefaultTransformer<>()).subscribe(observer); sApiServer.appUpdate().compose(new DefaultTransformer<>()).subscribe(observer);
} }
@@ -2808,7 +2786,6 @@ public class RetrofitClient {
} }
public void firstChargeGift(BaseObserver<FirstChargeGiftBean> observer) { public void firstChargeGift(BaseObserver<FirstChargeGiftBean> observer) {
// sApiServer.firstChargeGift().compose(new DefaultTransformer<>()).subscribe(observer);
sApiServer.firstChargeGift().enqueue(new Callback<BaseModel<FirstChargeGiftBean>>() { sApiServer.firstChargeGift().enqueue(new Callback<BaseModel<FirstChargeGiftBean>>() {
@Override @Override
public void onResponse(Call<BaseModel<FirstChargeGiftBean>> call, Response<BaseModel<FirstChargeGiftBean>> response) { public void onResponse(Call<BaseModel<FirstChargeGiftBean>> call, Response<BaseModel<FirstChargeGiftBean>> response) {

View File

@@ -28,7 +28,7 @@ public enum EnvironmentEnum {
1600096890, 1600096890,
"02f7339ec98947deaeab173599891932", "02f7339ec98947deaeab173599891932",
"tcp://1.13.181.248", "tcp://1.13.181.248",
"https://test.vespa.xscmmidi.site/h5", "https://test.vespa.qxyushen.top/h5",
1); 1);
private final String serverUrl;//服务器地址 private final String serverUrl;//服务器地址

View File

@@ -2,6 +2,8 @@ package com.xscm.moduleutil.utils.logger;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.blankj.utilcode.util.LogUtils;
/** /**
* SCore * SCore
* Created by ShangChuanliang * Created by ShangChuanliang
@@ -61,7 +63,9 @@ public final class DataLogger implements DataLoggingInterceptor.Logger {
} }
// 响应结束,打印整条日志 // 响应结束,打印整条日志
if (message.startsWith(DataLoggingInterceptor.sLogEndFlag)) { if (message.startsWith(DataLoggingInterceptor.sLogEndFlag)) {
LogUtil.d(mMessage.toString()); if (mMessage.toString().contains("https://test.vespa.xscmmidi.site/api/Xintiao/keep_xintiao"))
return;
LogUtils.d(mMessage.toString());
return; return;
} }

View File

@@ -195,6 +195,16 @@
android:exported="true" /> android:exported="true" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application> </application>
</manifest> </manifest>

View File

@@ -1,14 +1,10 @@
package com.xscm.modulemain package com.xscm.modulemain
import android.content.Context import android.content.Context
import com.blankj.utilcode.util.CrashUtils
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
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.api.DefaultRefreshFooterCreator
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreator
import com.scwang.smartrefresh.layout.api.RefreshFooter
import com.scwang.smartrefresh.layout.api.RefreshHeader
import com.scwang.smartrefresh.layout.api.RefreshLayout
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.widget.WheatLayoutSingManager import com.xscm.modulemain.widget.WheatLayoutSingManager
@@ -17,17 +13,67 @@ import com.xscm.moduleutil.base.CommonAppContext
open class Application : CommonAppContext() { open class Application : CommonAppContext() {
var APP_CONENT = ""
var LOGUTILS_SAVE_PATH = ""
var CRASHUTILS_SAVE_PATH = ""
// 单例实例
companion object {
@Volatile
private lateinit var instance: Application
// 全局获取 Application 实例
fun getInstance(): Application {
return instance
}
// 获取 Application Context避免内存泄漏
fun getContext(): Context {
return instance.applicationContext
}
}
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
LOGUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_LOG")?.absolutePath.toString()
CRASHUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_CRASH")?.absolutePath.toString()
getExternalFilesDir("")
APP_CONENT = getExternalFilesDir("APP_CONTENT")?.absolutePath.toString()
// 初始化单例实例
instance = this
// 初始化并预绘制视图 二卡八列 // 初始化并预绘制视图 二卡八列
WheatLayoutSingManager.init(this) WheatLayoutSingManager.init(this)
WheatLayoutSingManager.getInstance().setWheatData( null) WheatLayoutSingManager.getInstance().setWheatData(null)
// 默认情况下SVGA 内部不会输出任何 log所以需要手动设置为 true // 默认情况下SVGA 内部不会输出任何 log所以需要手动设置为 true
SVGALogger.setLogEnabled(false) SVGALogger.setLogEnabled(false)
LogUtils.getConfig().isLogSwitch = true
initLogUtils()
initCrashUtils()
initSmartRefreshLayout()
}
private fun initLogUtils() {
LogUtils.getConfig()
.setLogSwitch(true) // 全局开关
.setLog2FileSwitch(true) // 必须设为 true
.setDir(LOGUTILS_SAVE_PATH) // 设置有效路径
.setFileFilter(LogUtils.V); // 允许所有级别
}
private fun initCrashUtils() {
CrashUtils.init(CRASHUTILS_SAVE_PATH, object : CrashUtils.OnCrashListener {
override fun onCrash(crashInfo: CrashUtils.CrashInfo?) {
LogUtils.e("crash", crashInfo.toString())
}
})
}
private fun initSmartRefreshLayout() {
//设置全局的Header构建器 //设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, _ -> SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, _ ->
val header = ClassicsHeader(context) val header = ClassicsHeader(context)
@@ -49,4 +95,9 @@ open class Application : CommonAppContext() {
} }
} }
fun getAppContent(): String {
return APP_CONENT
}
} }

View File

@@ -1366,7 +1366,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} else if (msgType == EMMessageInfo.QXRoomMessageTypeRoomIsHostvalue) { } else if (msgType == EMMessageInfo.QXRoomMessageTypeRoomIsHostvalue) {
roomFragment!!.handleMsgType1028(messageEvent) roomFragment!!.handleMsgType1028(messageEvent)
} else if (msgType == EMMessageInfo.QXRoomMessageTypezailx) { } else if (msgType == EMMessageInfo.QXRoomMessageTypezailx) {
var userId = messageEvent!!.text!!.user_id!! val userId = messageEvent.text?.user_id
LogUtils.e("messageEvent!!.text.type" + messageEvent.text.type) LogUtils.e("messageEvent!!.text.type" + messageEvent.text.type)
CommonAppContext.getInstance().onlineMap[userId ?: ""] = messageEvent.text.type CommonAppContext.getInstance().onlineMap[userId ?: ""] = messageEvent.text.type
if (mRoomInfoResp != null && mRoomInfoResp!!.room_info != null) { if (mRoomInfoResp != null && mRoomInfoResp!!.room_info != null) {
@@ -1388,19 +1388,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
CommonAppContext.getInstance().getOnlineMap() CommonAppContext.getInstance().getOnlineMap()
} else if (msgType == EMMessageInfo.QXRoomMessageTypeQingGRMl) { // 1059清除个人魅力 1058在离线 } else if (msgType == EMMessageInfo.QXRoomMessageTypeQingGRMl) { // 1059清除个人魅力 1058在离线
if (mRoomInfoResp != null && mRoomInfoResp!!.room_info != null) { if (mRoomInfoResp != null && mRoomInfoResp!!.room_info != null) {
if (mRoomInfoResp!!.room_info.type_id == "1" || mRoomInfoResp!!.room_info.type_id == "3" || roomFragment!!.handleRoomMessage(messageEvent)
mRoomInfoResp!!.room_info.type_id == "4" || mRoomInfoResp!!.room_info.type_id == "8"
) {
if (mRoomInfoResp!!.room_info.label_id == "1") {
roomFragment!!.handleRoomMessage(messageEvent)
} else {
roomFragment!!.handleRoomMessage(messageEvent)
}
} else if (mRoomInfoResp!!.room_info.type_id == "2") {
roomFragment!!.handleRoomMessage(messageEvent)
} else if (mRoomInfoResp!!.room_info.type_id == "7") {
roomFragment!!.handleRoomMessage(messageEvent)
}
} }
} else if (msgType == EMMessageInfo.QXRoomMessageTypeMangH) { // 1056 抽奖结果 } else if (msgType == EMMessageInfo.QXRoomMessageTypeMangH) { // 1056 抽奖结果
val dialog = supportFragmentManager val dialog = supportFragmentManager

View File

@@ -11,16 +11,10 @@ import android.util.DisplayMetrics;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupWindow; import android.widget.PopupWindow;
import android.widget.Switch; import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.orhanobut.logger.Logger; import com.orhanobut.logger.Logger;
import com.xscm.modulemain.R; import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.room.activity.RoomActivity; import com.xscm.modulemain.activity.room.activity.RoomActivity;
@@ -49,7 +43,6 @@ import com.xscm.moduleutil.utils.ClickUtils;
import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.utils.StringUtil; import com.xscm.moduleutil.utils.StringUtil;
import com.xscm.moduleutil.widget.RoomFriendshipWheatView; import com.xscm.moduleutil.widget.RoomFriendshipWheatView;
import com.xscm.moduleutil.widget.SharedViewModel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@@ -174,11 +167,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
return new FriendshipRoomPresenter(this, getActivity()); return new FriendshipRoomPresenter(this, getActivity());
} }
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
}
@Override @Override
protected void initData() { protected void initData() {
@@ -366,7 +354,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
// 2. 邀请用户上麦 // 2. 邀请用户上麦
// 3. 锁定/解锁麦位等 // 3. 锁定/解锁麦位等
pitNumber = pitBean.getPit_number(); pitNumber = pitBean.getPit_number();
if (cheackWether(pitBean.getPit_number())) { if (checkWeather(pitBean.getPit_number())) {
showPopupMenu(wheatView); // v 是点击的按钮视图 showPopupMenu(wheatView); // v 是点击的按钮视图
} else if (pitBean.getPit_number().equals("10")) { } else if (pitBean.getPit_number().equals("10")) {
RoomOnlineDialogFragment.show(roomId, "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager()); RoomOnlineDialogFragment.show(roomId, "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
@@ -653,7 +641,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
if (pitBean7.getUser_id().equals(messageEvent.getText().getUser_id())) { if (pitBean7.getUser_id().equals(messageEvent.getText().getUser_id())) {
pitBean7.setIs_online(type == 1 ? 1 : 2); pitBean7.setIs_online(type == 1 ? 1 : 2);
mBinding.wheatView6.setData(pitBean7); mBinding.wheatView6.setData(pitBean7);
return;
} }
} }
@@ -707,7 +694,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
}); });
} }
private boolean cheackWether(String pitNumber) { private boolean checkWeather(String pitNumber) {
if (roomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1")) {//排麦模式 if (roomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1")) {//排麦模式
if (roomInfoResp.getUser_info().getIs_management() == 1 || roomInfoResp.getUser_info().getIs_host() == 1 || roomInfoResp.getUser_info().getIs_room_owner() == 1) { if (roomInfoResp.getUser_info().getIs_management() == 1 || roomInfoResp.getUser_info().getIs_host() == 1 || roomInfoResp.getUser_info().getIs_room_owner() == 1) {
if (pitNumber.equals("9")) { if (pitNumber.equals("9")) {
@@ -1118,7 +1105,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
mBinding.wheatView6.setLockZl(false); mBinding.wheatView6.setLockZl(false);
} }
// assert md3 != null;
if (md3 != null && md3.getHeartNum() > 0) { if (md3 != null && md3.getHeartNum() > 0) {
if (mBinding.wheatView3.pitBean.getUser_id().equals(SpUtil.getUserId() + "")) { if (mBinding.wheatView3.pitBean.getUser_id().equals(SpUtil.getUserId() + "")) {
mBinding.wheatView3.setLockZl(false); mBinding.wheatView3.setLockZl(false);

View File

@@ -1,16 +1,11 @@
package com.xscm.modulemain.activity.room.fragment; package com.xscm.modulemain.activity.room.fragment;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator; import android.view.animation.LinearInterpolator;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.LogUtils;
@@ -19,13 +14,13 @@ import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.modulemain.R; import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.room.activity.RoomActivity; import com.xscm.modulemain.activity.room.activity.RoomActivity;
import com.xscm.modulemain.activity.room.contacts.RoomContacts;
import com.xscm.modulemain.activity.room.presenter.RoomPresenter;
import com.xscm.modulemain.databinding.FragmentRoomKtvBinding; import com.xscm.modulemain.databinding.FragmentRoomKtvBinding;
import com.xscm.modulemain.dialog.RoomCharmDialog; import com.xscm.modulemain.dialog.RoomCharmDialog;
import com.xscm.modulemain.dialog.RoomGiftDialogFragment; import com.xscm.modulemain.dialog.RoomGiftDialogFragment;
import com.xscm.modulemain.dialog.RoomOnlineDialogFragment; import com.xscm.modulemain.dialog.RoomOnlineDialogFragment;
import com.xscm.modulemain.dialog.RoomUserInfoFragment; import com.xscm.modulemain.dialog.RoomUserInfoFragment;
import com.xscm.modulemain.activity.room.contacts.RoomContacts;
import com.xscm.modulemain.activity.room.presenter.RoomPresenter;
import com.xscm.modulemain.dialog.TunerDialogFragment; import com.xscm.modulemain.dialog.TunerDialogFragment;
import com.xscm.moduleutil.base.BaseMvpFragment; import com.xscm.moduleutil.base.BaseMvpFragment;
import com.xscm.moduleutil.bean.MusicSongBean; import com.xscm.moduleutil.bean.MusicSongBean;
@@ -46,9 +41,7 @@ import com.xscm.moduleutil.utils.ClickUtils;
import com.xscm.moduleutil.utils.ImageUtils; import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.widget.RoomKtvWheatView; import com.xscm.moduleutil.widget.RoomKtvWheatView;
import com.xscm.moduleutil.widget.SharedViewModel;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import org.greenrobot.eventbus.ThreadMode;
@@ -88,14 +81,10 @@ public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoom
} }
public View getNegativeMarginView() {
return mBinding.muZc;
}
public void roomInfoUpdate(RoomInfoResp resp) { public void roomInfoUpdate(RoomInfoResp resp) {
roomInfoResp = resp; roomInfoResp = resp;
// upData();
} }
private void upData() { private void upData() {
@@ -166,7 +155,7 @@ public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoom
mBinding.muXName.setText(roomInfoResp.getNextInfo().getSong_name()); mBinding.muXName.setText(roomInfoResp.getNextInfo().getSong_name());
} }
if (roomInfoResp.getRoom_info().getPit_list() != null && roomInfoResp.getRoom_info().getPit_list().size() > 0) { if (roomInfoResp.getRoom_info().getPit_list() != null && !roomInfoResp.getRoom_info().getPit_list().isEmpty()) {
for (RoomPitBean roomPitBean : roomInfoResp.getRoom_info().getPit_list()) { for (RoomPitBean roomPitBean : roomInfoResp.getRoom_info().getPit_list()) {
if (roomPitBean.getPit_number().equals("9")) { if (roomPitBean.getPit_number().equals("9")) {
RoomKtvWheatView roomDefaultWheatView = mBinding.muZc; RoomKtvWheatView roomDefaultWheatView = mBinding.muZc;
@@ -192,7 +181,7 @@ public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoom
} }
} }
if (roomInfoResp.getSong_pit_list() != null && roomInfoResp.getSong_pit_list().size() > 0) { if (roomInfoResp.getSong_pit_list() != null && !roomInfoResp.getSong_pit_list().isEmpty()) {
adapter.setNewData(roomInfoResp.getSong_pit_list()); adapter.setNewData(roomInfoResp.getSong_pit_list());
for (RoomPitBean roomPitBean : roomInfoResp.getSong_pit_list()) { for (RoomPitBean roomPitBean : roomInfoResp.getSong_pit_list()) {
if (roomPitBean.getUser_id().equals(SpUtil.getUserId() + "")) { if (roomPitBean.getUser_id().equals(SpUtil.getUserId() + "")) {

View File

@@ -18,16 +18,12 @@ import com.xscm.moduleutil.widget.dialog.BaseDialog;
*@description: 房间公告展示 *@description: 房间公告展示
*/ */
public class RoomNoticeDialogFragment extends BaseDialog { public class RoomNoticeDialogFragment extends BaseDialog {
private Context mContext;
private TextView tvTile; private TextView tvTile;
private TextView tvContent; private TextView tvContent;
private ImageView ivClose; private ImageView ivClose;
String title, content;
public RoomNoticeDialogFragment(@NonNull Context context) { public RoomNoticeDialogFragment(@NonNull Context context) {
super(context); super(context);
this.mContext = context;
} }
@Override @Override

View File

@@ -170,11 +170,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
return; // 快速重复点击,直接返回 return; // 快速重复点击,直接返回
} }
RoomUserInfoFragment.show(roomId, pitBean.getUser_id(), pitBean.getPit_number(), getHostUser(), false, 3, isNumberWhether(), getChildFragmentManager()); RoomUserInfoFragment.show(roomId, pitBean.getUser_id(), pitBean.getPit_number(), getHostUser(), false, 3, isNumberWhether(), getChildFragmentManager());
// 点击的麦位是当前麦位
// 可以执行相应的操作,如显示提示信息或执行其他逻辑
} else { } else {
// 点击的麦位不是当前麦位
// 可以执行相应的操作,如显示提示信息或执行其他逻辑
if (cheackWether(pitBean.getPit_number())) { if (cheackWether(pitBean.getPit_number())) {
pitNumber = pitBean.getPit_number(); pitNumber = pitBean.getPit_number();
roomPitBean = pitBean; roomPitBean = pitBean;

View File

@@ -67,11 +67,11 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
private VoiceFragment voiceFragment; private VoiceFragment voiceFragment;
public VoiceCategoryFragment () { public VoiceCategoryFragment() {
} }
public VoiceCategoryFragment (VoiceFragment voiceFragment){ public VoiceCategoryFragment(VoiceFragment voiceFragment) {
this.voiceFragment = voiceFragment; this.voiceFragment = voiceFragment;
} }
@@ -79,7 +79,7 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
return new VoiceCategoryFragment(voiceFragment); return new VoiceCategoryFragment(voiceFragment);
} }
public void showLoading(){ public void showLoading() {
voiceFragment.isShowLoading(true); voiceFragment.isShowLoading(true);
} }
@@ -126,7 +126,7 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
* type=1时该值表示房间idtype=2时表示文章id * type=1时该值表示房间idtype=2时表示文章id
*/ */
BannerModel bannerModel = (BannerModel) model; BannerModel bannerModel = (BannerModel) model;
Intent intent=new Intent(getActivity(), WebViewActivity.class); Intent intent = new Intent(getActivity(), WebViewActivity.class);
intent.putExtra("url", bannerModel.getUrl()); intent.putExtra("url", bannerModel.getUrl());
intent.putExtra("title", "首页横幅"); intent.putExtra("title", "首页横幅");
startActivity(intent); startActivity(intent);
@@ -148,7 +148,7 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
// 示例:跳转到房间 详情页 // 示例:跳转到房间 详情页
if (data != null) { if (data != null) {
showLoading(); showLoading();
RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), data.getRoom_id() ,"",null); RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), data.getRoom_id(), "", null);
} }
}); });
@@ -171,7 +171,7 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
String roomId = item.getRoom_id(); // 或者 item.getRoomId(); 确保方法名正确 String roomId = item.getRoom_id(); // 或者 item.getRoomId(); 确保方法名正确
if (roomId != null && !roomId.isEmpty()) { // 检查 roomId 是否有效 if (roomId != null && !roomId.isEmpty()) { // 检查 roomId 是否有效
showLoading(); showLoading();
RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), roomId,"",null); RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), roomId, "", null);
} else { } else {
// Log.d(TAG, "Room ID is null or empty for item at position: " + position); // Log.d(TAG, "Room ID is null or empty for item at position: " + position);
} }
@@ -191,13 +191,13 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
}); });
mBinding.homeGg.setOnClickListener(v -> { mBinding.homeGg.setOnClickListener(v -> {
Intent intent=new Intent(getActivity(), OfficialNoticeActivity.class); Intent intent = new Intent(getActivity(), OfficialNoticeActivity.class);
intent.putExtra("type", "2"); intent.putExtra("type", "2");
startActivity(intent); startActivity(intent);
}); });
mBinding.imX.setOnClickListener(v -> { mBinding.imX.setOnClickListener(v -> {
Intent intent=new Intent(getActivity(), PopularRoomActivity.class); Intent intent = new Intent(getActivity(), PopularRoomActivity.class);
startActivity(intent); startActivity(intent);
}); });
} }
@@ -225,10 +225,10 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
//// info.add(mqttBean.getList().getFromUserName() + "送给" + mqttBean.getList().getToUserName() + "\n" + mqttBean.getList().getGiftName()); //// info.add(mqttBean.getList().getFromUserName() + "送给" + mqttBean.getList().getToUserName() + "\n" + mqttBean.getList().getGiftName());
// } // }
for (int i=0;i<cachedMqttBeans.size();i++){ for (int i = 0; i < cachedMqttBeans.size(); i++) {
mqttList.addAll(cachedMqttBeans.get(i).getList()); mqttList.addAll(cachedMqttBeans.get(i).getList());
} }
for (int i=0;i<mqttList.size();i++){ for (int i = 0; i < mqttList.size(); i++) {
info.add(mqttList.get(i).getFromUserName() + "送给" + mqttList.get(i).getToUserName() + "\n" + mqttList.get(i).getGiftName()); info.add(mqttList.get(i).getFromUserName() + "送给" + mqttList.get(i).getToUserName() + "\n" + mqttList.get(i).getGiftName());
} }
@@ -268,7 +268,8 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
// 创建适配器 // 创建适配器
MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getActivity(), list); MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getActivity(), list);
mBinding.viewPager.setAdapter(adapter); mBinding.viewPager.setAdapter(adapter);
if (!list.isEmpty())
mBinding.viewPager.setOffscreenPageLimit(list.size() - 1);
// 设置 TabLayout 与 ViewPager2 的关联 // 设置 TabLayout 与 ViewPager2 的关联
new TabLayoutMediator(mBinding.slidingTabLayout, mBinding.viewPager, new TabLayoutMediator(mBinding.slidingTabLayout, mBinding.viewPager,
(tab, position) -> { (tab, position) -> {
@@ -284,11 +285,9 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
if (position == 0) { if (position == 0) {
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
textView.setTextColor(getResources().getColor(android.R.color.white)); textView.setTextColor(getResources().getColor(android.R.color.white));
// customView.setBackgroundResource(com.xscm.moduleutil.R.drawable.tab_indicator);
} else { } else {
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
textView.setTextColor(Color.parseColor("#F1ECFF")); textView.setTextColor(Color.parseColor("#F1ECFF"));
// customView.setBackgroundResource(com.xscm.moduleutil.R.drawable.tab_unselected_background);
} }
tab.setCustomView(customView); tab.setCustomView(customView);
@@ -309,12 +308,11 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
textView.setTextColor(getResources().getColor(android.R.color.white)); textView.setTextColor(getResources().getColor(android.R.color.white));
} }
// customView.setBackgroundResource(com.xscm.moduleutil.R.drawable.tab_indicator);
} }
RoomTypeModel roomTypeModel = list.get(position); RoomTypeModel roomTypeModel = list.get(position);
String categoryId = roomTypeModel.getId(); String categoryId = roomTypeModel.getId();
HotListFragment.newInstance(VoiceCategoryFragment.this,categoryId, TYPE_INDEX); HotListFragment.newInstance(VoiceCategoryFragment.this, categoryId, TYPE_INDEX);
} }
} }
@@ -356,12 +354,7 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
@Override @Override
public void setTopRoom(List<TopRoom> topRooms, int type) { public void setTopRoom(List<TopRoom> topRooms, int type) {
// if (topRooms == null || topRooms.isEmpty() || topRooms.size() < 1) {
// mBinding.constraintLayout.setVisibility(View.GONE);
// return;
// }else {
mBinding.constraintLayout.setVisibility(View.VISIBLE); mBinding.constraintLayout.setVisibility(View.VISIBLE);
// }
roomList = topRooms; roomList = topRooms;
mBinding.bannerViewPager.create(topRooms); // 刷新数据并启动自动播放 mBinding.bannerViewPager.create(topRooms); // 刷新数据并启动自动播放
} }
@@ -390,7 +383,7 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
public Fragment createFragment(int position) { public Fragment createFragment(int position) {
RoomTypeModel roomTypeModel = list.get(position); RoomTypeModel roomTypeModel = list.get(position);
String categoryId = roomTypeModel.getId(); String categoryId = roomTypeModel.getId();
return HotListFragment.newInstance(VoiceCategoryFragment.this,categoryId, TYPE_INDEX); return HotListFragment.newInstance(VoiceCategoryFragment.this, categoryId, TYPE_INDEX);
} }
@Override @Override

View File

@@ -35,12 +35,6 @@ public class RoomPresenter extends BasePresenter<RoomContacts.View> implements R
@Override @Override
public void getRoomIn(String roomId, String password) { public void getRoomIn(String roomId, String password) {
// Type listType = new TypeToken<RoomInfoResp>() {}.getType();
// RoomInfoResp restoredRoomModels = GsonUtils.getGSON().fromJson(SpUtil.getRoomInfoResp(), listType);
// if (restoredRoomModels!= null ) {
// MvpRef.get().roomInfo(restoredRoomModels);
// }
api.roomGetIn(roomId, password, new BaseObserver<RoomInfoResp>() { api.roomGetIn(roomId, password, new BaseObserver<RoomInfoResp>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
@@ -70,15 +64,6 @@ public class RoomPresenter extends BasePresenter<RoomContacts.View> implements R
AgoraManager.getInstance(mContext.getApplicationContext()) AgoraManager.getInstance(mContext.getApplicationContext())
.joinRoom(token, roomId, uid, enableMic,enableJs); .joinRoom(token, roomId, uid, enableMic,enableJs);
} }
// 初始化 Agora 并加入房间
// RtcCore rtcCore = RtcCore.getInstance(getView().getSelfActivity());
// rtcCore.initAgora(appId);
// 2. 加入房间
// rtcCore.joinRoom(token, roomId, uid, enableMic);
if (MvpRef==null){ if (MvpRef==null){
MvpRef=new WeakReference<>(mView); MvpRef=new WeakReference<>(mView);
} }

View File

@@ -1,7 +1,9 @@
package com.xscm.modulemain.activity.user.activity; package com.xscm.modulemain.activity.user.activity;
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.os.Handler; import android.os.Handler;
import android.view.View; import android.view.View;
@@ -9,7 +11,11 @@ import androidx.appcompat.app.AlertDialog;
import com.alibaba.android.arouter.launcher.ARouter; import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.FileUtils; import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils; import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.ZipUtils;
import com.tencent.qcloud.tuikit.timcommon.util.FileProvider;
import com.xscm.modulemain.Application;
import com.xscm.modulemain.R; import com.xscm.modulemain.R;
import com.xscm.modulemain.databinding.ActivitySettingBinding; import com.xscm.modulemain.databinding.ActivitySettingBinding;
import com.xscm.modulemain.activity.user.conacts.SettingConacts; import com.xscm.modulemain.activity.user.conacts.SettingConacts;
@@ -24,6 +30,17 @@ import com.xscm.moduleutil.utils.config.ConfigManager;
import com.xscm.moduleutil.utils.config.EnvironmentEnum; import com.xscm.moduleutil.utils.config.EnvironmentEnum;
import com.xscm.moduleutil.utils.config.EnvironmentPrefs; import com.xscm.moduleutil.utils.config.EnvironmentPrefs;
import com.xscm.moduleutil.widget.CommonAppConfig; import com.xscm.moduleutil.widget.CommonAppConfig;
import java.io.File;
import java.util.Objects;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/** /**
*@author qx *@author qx
*@data 2025/8/14 *@data 2025/8/14
@@ -67,8 +84,10 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
mBinding.llZhxiao.setOnClickListener(this::onClick); mBinding.llZhxiao.setOnClickListener(this::onClick);
mBinding.llGywm.setOnClickListener(this::onClick); mBinding.llGywm.setOnClickListener(this::onClick);
mBinding.llBbh.setOnClickListener(this::onClick); mBinding.llBbh.setOnClickListener(this::onClick);
mBinding.tvShare.setOnClickListener(this::onClick);
} }
@SuppressLint("CheckResult")
private void onClick(View view) { private void onClick(View view) {
if (view.getId() == R.id.ll_youth) { if (view.getId() == R.id.ll_youth) {
// startActivity(new Intent(this, UnderageActivity.class)); // startActivity(new Intent(this, UnderageActivity.class));
@@ -184,6 +203,47 @@ public class SettingActivity extends BaseMvpActivity<SettingPresenter, ActivityS
handler.postDelayed(resetRunnable, RESET_DELAY); handler.postDelayed(resetRunnable, RESET_DELAY);
} }
} }
} else if (view.getId() == R.id.tv_share) {
Observable.create(new ObservableOnSubscribe<Boolean>() {
@SuppressLint("CheckResult")
@Override
public void subscribe(ObservableEmitter<Boolean> emitter) throws Exception {
try {
File file = new File(Application.Companion.getInstance().getAppContent());
if (FileUtils.isFileExists(file.getParent() +"/DataInfo.zip")){
FileUtils.delete(file.getParent() +"/DataInfo.zip");
}
boolean isZip = ZipUtils.zipFile(Application.Companion.getInstance().getAppContent(),
file.getParent() +"/DataInfo.zip");
emitter.onNext(isZip);
}catch (Exception e){
LogUtils.e("压缩失败",e.toString());
emitter.onNext(false);
}
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Boolean>() {
@SuppressLint("CheckResult")
@Override
public void accept(Boolean aBoolean) {
if (aBoolean){
File file = new File(Application.Companion.getInstance().getAppContent()+"/DataInfo.zip");
Uri uri = FileProvider.getUriForFile(SettingActivity.this, getPackageName()+".fileprovider", file);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent,"分享到"));
}else {
LogUtils.e("压缩失败");
}
}
});
} }
} }
private void showYouthModelDialog() { private void showYouthModelDialog() {

View File

@@ -128,7 +128,8 @@ public class UnderageActivity extends BaseMvpActivity<UnderagePresenter, Activit
// ToastUtils.showShort("密码验证成功"); // ToastUtils.showShort("密码验证成功");
ARouter.getInstance().build(ARouteConstants.ME).navigation(); ARouter.getInstance().build(ARouteConstants.ME).navigation();
ActivityUtils.finishAllActivities(); ActivityUtils.finishActivity(WebViewActivity.class);
finish();
} else { } else {
// 密码错误,提示并清空输入框 // 密码错误,提示并清空输入框
ToastUtils.showShort("密码错误,请重新输入"); ToastUtils.showShort("密码错误,请重新输入");
@@ -191,10 +192,6 @@ public class UnderageActivity extends BaseMvpActivity<UnderagePresenter, Activit
* 跳转到下一个页面 * 跳转到下一个页面
*/ */
private void navigateToNextPage() { private void navigateToNextPage() {
// ToastUtils.showShort("密码设置成功");
// ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken())
// .withString("type", "1").navigation();
Intent intent = new Intent(UnderageActivity.this, WebViewActivity.class); Intent intent = new Intent(UnderageActivity.this, WebViewActivity.class);
intent.putExtra("type", "1"); intent.putExtra("type", "1");
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken()); intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken());
@@ -203,8 +200,6 @@ public class UnderageActivity extends BaseMvpActivity<UnderagePresenter, Activit
mBinding.verificationcodeview.setText(""); mBinding.verificationcodeview.setText("");
finish(); finish();
// 这里可以添加页面跳转逻辑
ActivityUtils.finishAllActivities();
} }
@Override @Override

View File

@@ -383,5 +383,14 @@
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
<TextView
android:id="@+id/tv_share"
android:layout_gravity="start"
android:padding="@dimen/dp_40"
android:layout_marginTop="-50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>
</layout> </layout>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!-- Environment.getExternalStorageDirectory()-->
<external-path
name="external-path"
path="."/>
<!-- Context.getExternalCacheDir() -->
<external-cache-path
name="external-cache-path"
path="."/>
<!-- Context.getExternalFilesDir(null) -->
<external-files-path
name="external-files-path"
path="."/>
<!-- Context.getFilesDir() -->
<files-path
name="files_path"
path="."/>
<root-path
name="name"
path="."/>
</paths>

View File

@@ -201,6 +201,17 @@
android:name=".PasswordLoginActivity" android:name=".PasswordLoginActivity"
android:exported="true" android:exported="true"
/> />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application> </application>
<!-- <queries>--> <!-- <queries>-->
<!-- &lt;!&ndash; 支付宝 scheme &ndash;&gt;--> <!-- &lt;!&ndash; 支付宝 scheme &ndash;&gt;-->

View File

@@ -0,0 +1,3 @@
package com.qxcm.qxlive;
public class FileProvider extends androidx.core.content.FileProvider {}

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!-- Environment.getExternalStorageDirectory()-->
<external-path
name="external-path"
path="."/>
<!-- Context.getExternalCacheDir() -->
<external-cache-path
name="external-cache-path"
path="."/>
<!-- Context.getExternalFilesDir(null) -->
<external-files-path
name="external-files-path"
path="."/>
<!-- Context.getFilesDir() -->
<files-path
name="files_path"
path="."/>
<!-- Context.getCacheDir() -->
<cache-path
name="cache-path"
path="."/>
<root-path
name="name"
path="."/>
</paths>