修改交友布局

This commit is contained in:
2025-08-26 19:34:44 +08:00
commit 8eb8ac5397
3152 changed files with 1442170 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
package com.xscm.moduleutil;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.xscm.moduleutil.test", appContext.getPackageName());
}
}

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application android:allowBackup="true">
<service
android:name=".service.MyRoomService"
android:enabled="true"
android:exported="true"/>
<activity
android:name=".activity.QxActivity"
android:exported="false" />
<service
android:name=".http.FloatingWindowService"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="specialUse" />
<activity
android:name=".activity.WebViewActivity"
android:exported="false">
<intent-filter>
<action android:name="com.xscm.qxlive.PROTOCOL_WEBVIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".activity.news.OfficialNoticeActivity"
android:exported="false" />
<service android:name="org.eclipse.paho.android.service.MqttService" /> <!-- <receiver android:name="org.eclipse.paho.android.service.AlarmPingSender$AlarmReceiver" -->
<!-- android:enabled="true" -->
<!-- android:exported="true" -->
<!-- tools:ignore="Instantiatable" /> -->
<!-- <service android:name=".service.EMqttService" />-->
<service
android:name=".service.MyMqttService"
android:foregroundServiceType="dataSync" />
</application>
</manifest>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,20 @@
package com.xscm.moduleutil;
import lombok.Data;
@Data
public class RoomAutionTimeBean {
private int days; // 天数,例如 1, 3, 5, 10, 15, 20
private boolean isSelected;
public RoomAutionTimeBean(int days) {
this.days = days;
}
/**
* 获取对应小时数1天 = 24小时
*/
public int getHours() {
return days * 24;
}
}

View File

@@ -0,0 +1,322 @@
package com.xscm.moduleutil.activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.BarUtils;
import com.tencent.qcloud.tuikit.tuichat.bean.ChatInfo;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.BackgroundManager;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.DisplayUtil;
import com.xscm.moduleutil.utils.LanguageUtil;
import com.xscm.moduleutil.utils.SpUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public abstract class BaseAppCompatActivity<VDB extends ViewDataBinding> extends AppCompatActivity
implements BackgroundManager.BackgroundUpdateListener, ColorManager.ColorChangeListener {
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LanguageUtil.attachBaseContext(newBase));
}
protected VDB mBinding;
private static final List<BaseMvpActivity> activityList = new ArrayList<>();
// private LoadingDialog mLoadingDialog;
// 添加广播接收器成员变量
private BroadcastReceiver mLogoutReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if ("com.xscm.moduleutil.ACTION_USER_LOGOUT".equals(intent.getAction())) {
// 在这里处理用户登出后的UI更新
// 例如:隐藏需要登录才能显示的控件
// 或者跳转到登录状态的页面
handleUserLogout();
}
}
};
// 处理用户登出的方法
protected void handleUserLogout() {
// 子类可以重写此方法处理具体的登出逻辑
// 例如更新UI状态、清除本地数据等
ActivityUtils.finishAllActivities();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().getDecorView().setBackgroundResource(R.mipmap.log_bj);
setContentView(getLayoutId());
// 隐藏标题栏
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
mBinding = DataBindingUtil.setContentView(this, getLayoutId());
mBinding.setLifecycleOwner(this);
ARouter.getInstance().inject(this);
BarUtils.setStatusBarLightMode(this, isLightMode());
BarUtils.transparentStatusBar(this);
initView();
initData();
initCompleted();
// 注册背景更新监听器
BackgroundManager.getInstance().addListener(this);
// 尝试加载网络背景
loadNetworkBackground();
// 注册颜色变化监听器
ColorManager.getInstance().addColorChangeListener(this);
// 注册登出广播接收器
IntentFilter filter = new IntentFilter("com.xscm.moduleutil.ACTION_USER_LOGOUT");
registerReceiver(mLogoutReceiver, filter);
// 动态判断是否包含 @Subscribe 注解的方法
boolean hasSubscribeMethods = false;
for (Method method : getClass().getDeclaredMethods()) {
if (method.isAnnotationPresent(Subscribe.class)) {
hasSubscribeMethods = true;
break;
}
}
if (hasSubscribeMethods) {
EventBus.getDefault().register(this);
}
// // 设置全屏模式,隐藏状态栏和导航栏
// View decorView = getWindow().getDecorView();
// decorView.setSystemUiVisibility(
// View.SYSTEM_UI_FLAG_LAYOUT_STABLE
// | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
// | View.SYSTEM_UI_FLAG_FULLSCREEN
// | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
public static void finishAll() {
for (BaseMvpActivity activity : activityList) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
@Override
public void onColorChanged() {
// 在主线程中更新UI
runOnUiThread(this::updateUIColors);
}
// 子类可以重写此方法来更新UI颜色
protected void updateUIColors() {
// 默认实现,子类可以覆盖
}
protected void loadNetworkBackground() {
// 只有当已经有背景URL时才加载
String backgroundUrl = BackgroundManager.getInstance().getBackgroundUrl();
if (backgroundUrl != null && !backgroundUrl.isEmpty()) {
// 检查是否有已加载的drawable
Drawable cachedDrawable = BackgroundManager.getInstance().getBackgroundDrawable();
if (cachedDrawable != null) {
getWindow().getDecorView().setBackground(cachedDrawable);
} else {
// 加载网络背景
BackgroundManager.getInstance().loadBackgroundDrawable(this, new BackgroundManager.BackgroundLoadCallback() {
@Override
public void onLoadSuccess(Drawable drawable) {
getWindow().getDecorView().setBackground(drawable);
}
@Override
public void onLoadFailed() {
// 加载失败时使用默认背景
getWindow().getDecorView().setBackgroundResource(R.mipmap.activity_bj);
}
});
}
}
}
@Override
public void onBackgroundUpdated(Drawable drawable) {
// 当背景更新时更新当前Activity的背景
if (drawable != null) {
getWindow().getDecorView().setBackground(drawable);
}
}
// 提供一个方法供子类调用用于设置背景URL
protected void setNetworkBackgroundUrl(String url) {
BackgroundManager.getInstance().setBackgroundUrl(url);
}
@Override
public Resources getResources() {//禁止app字体大小跟随系统字体大小调节
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1.0f) {
android.content.res.Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1.0f;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
static float fontScale = 1f;
// @Override
// public Resources getResources() {
// Resources resources = super.getResources();
// return DisplayUtil.getResources(this,resources,fontScale);
// }
public void setFontScale(float fontScale) {
this.fontScale = fontScale;
DisplayUtil.recreate(this);
}
public boolean isLightMode() {
return true;
}
protected abstract void initData();
protected abstract void initView();
protected void initCompleted() {
}
protected abstract int getLayoutId();
@Override
protected void onDestroy() {
// 移除背景更新监听器
BackgroundManager.getInstance().removeListener(this);
// 移除颜色变化监听器
ColorManager.getInstance().removeColorChangeListener(this);
if (mBinding != null) {
mBinding.unbind();
}
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
try {
unregisterReceiver(mLogoutReceiver);
} catch (Exception e) {
// 忽略异常
}
super.onDestroy();
}
public void showLoading(String content) {
// if (mLoadingDialog == null) {
// mLoadingDialog = new LoadingDialog(this);
// }
// if (!mLoadingDialog.isShowing()) {
// mLoadingDialog.show();
// }
}
public void showLoading() {
// if (mLoadingDialog == null) {
// mLoadingDialog = new LoadingDialog(this);
// }
// if (!mLoadingDialog.isShowing()) {
// mLoadingDialog.show();
// }
}
public void disLoading() {
// if (mLoadingDialog != null && mLoadingDialog.isShowing()) {
// mLoadingDialog.dismiss();
// }
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View view = getCurrentFocus();
if (isShouldHideInput(view, ev)) {
InputMethodManager Object = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (Object != null) {
Object.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
try {
return super.dispatchTouchEvent(ev);
} catch (Exception e) {
return false;
}
}
//判断是否隐藏键盘
public boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] leftTop = {0, 0};
//获取输入框当前的location位置
v.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域保留点击EditText的事件
return false;
} else {
return true;
}
}
return false;
}
// @Subscribe(threadMode = ThreadMode.MAIN)
// public void onMessageReceived(MqttBean mqttBean) {
//// PiaoPingManager.getInstance(this).showPiaoPingMessage(mqttBean);
// FxAppHelper fxAppHelper = FxAppHelper.builder().setContext(this).setLayout(R.layout.item_piaoping).build();
// FloatingX.install(fxAppHelper).show();
// }
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(ChatInfo event) {
String id = event.getId().replace("g", "");
ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/union/setGroup?id=" + SpUtil.getToken() + "&guildId=" + id).navigation();
}
}

View File

@@ -0,0 +1,253 @@
package com.xscm.moduleutil.activity;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.databinding.ViewDataBinding;
import com.blankj.utilcode.util.LogUtils;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.utils.LanguageUtil;
import com.xscm.moduleutil.utils.location.LocationProvider;
import com.xscm.moduleutil.utils.location.SystemLocationProvider;
import com.tencent.imsdk.v2.V2TIMCallback;
import com.tencent.imsdk.v2.V2TIMManager;
import com.tencent.imsdk.v2.V2TIMUserFullInfo;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.interfaces.TUICallback;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public abstract class BaseMvpActivity<P extends IPresenter, VDB extends ViewDataBinding> extends BaseAppCompatActivity<VDB> implements
IView<Activity> , LocationProvider.LocationCallback
{
protected P MvpPre;
protected abstract P bindPresenter();
private String city1;
@Override
protected void initView() {
MvpPre = bindPresenter();
}
@Override
public void showLoadings() {
// showLoading("加载中");
}
@Override
public void showLoadings(String content) {
// showLoading(content);
}
@Override
public void disLoadings() {
// disLoading();
}
@Override
protected void onDestroy() {
if (MvpPre != null) {
MvpPre.detachView();
}
super.onDestroy();
}
@Override
public Activity getSelfActivity() {
return this;
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LanguageUtil.attachBaseContext(newBase));
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void logOutEvent(UserBean userBean) {
// 在用户 UI 点击登录的时候调用
TUILogin.login(getBaseContext(), CommonAppContext.getInstance().getCurrentEnvironment().getSdkAppId(), "u"+userBean.getUser_id(), userBean.getTencent_im(), new TUICallback() {
@Override
public void onError(final int code, final String desc) {
LogUtils.e("@@@1",code,"描述:",desc);
}
@Override
public void onSuccess() {
LogUtils.e("@@@","成功");
// V2TIMUserFullInfo userFullInfo = new V2TIMUserFullInfo();
// userFullInfo.setNickname(userBean.getNickname());
// userFullInfo.setFaceUrl(userBean.getAvatar());
// userFullInfo.setAllowType(userBean.getSex());
// V2TIMManager.getInstance().setSelfInfo(userFullInfo, new V2TIMCallback() {
// @Override
// public void onSuccess() {
// LogUtils.e("@@@", "成功");
// }
//
// @Override
// public void onError(int code, String desc) {
// LogUtils.e("@@@", "描述"+desc);
// }
// });
initLocation();
}
});
}
private SystemLocationProvider locationProvider;
private void initLocation() {
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// 请求定位权限
ActivityCompat.requestPermissions(
(Activity) this,
new String[]{
android.Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
},
1001 // 自定义常量,比如 1001
);
}
locationProvider = new SystemLocationProvider();
// 请求一次性的位置信息
locationProvider.getLastKnownLocation(this, this);
}
@Override
public void onLocationReceived(double latitude, double longitude, String city) {
LogUtils.e("当前位置:" + city);
city1=city;
EventBus.getDefault().post(city1);
}
@Override
public void onFailed(String errorMessage) {
LogUtils.e("定位失败");
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1001) {
if (locationProvider==null) {
locationProvider = new SystemLocationProvider();
}
locationProvider.getLastKnownLocation(this, this);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void userInfoEvent(UserInfo event) {
// V2TIMUserFullInfo userFullInfo = new V2TIMUserFullInfo();
// userFullInfo.setNickname(event.getNickname());
// userFullInfo.setFaceUrl(event.getAvatar());
// userFullInfo.setAllowType(event.getSex());
// V2TIMManager.getInstance().setSelfInfo(userFullInfo, new V2TIMCallback() {
// @Override
// public void onSuccess() {
// LogUtils.e("@@@", "成功");
// }
//
// @Override
// public void onError(int code, String desc) {
// LogUtils.e("@@@", "描述"+desc);
// }
// });
}
/**
* 显示全局飘屏消息(支持任意位置飘过)
*
*/
// @Subscribe(threadMode = ThreadMode.MAIN)
// public void showPiaoPingMessage(MqttBean mqttBean) {
// WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// if (windowManager == null) return;
//
// int screenWidth = getResources().getDisplayMetrics().widthPixels;
// int screenHeight = getResources().getDisplayMetrics().heightPixels;
//
// WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
// WindowManager.LayoutParams.MATCH_PARENT,
// WindowManager.LayoutParams.WRAP_CONTENT,
// Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?
// WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :
// WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
// WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
// WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
// PixelFormat.TRANSLUCENT);
//
// // 设置 Gravity 为左上角
// layoutParams.gravity = Gravity.TOP | Gravity.START;
//
// // Y 轴随机位置
//// layoutParams.y = (int) ((Math.random() * (screenHeight - 200)));
//
// // 初始 X 设为负值,确保 View 在屏幕左侧外
// layoutParams.x = -screenWidth;
//
// View piaoPingView = LayoutInflater.from(this).inflate(R.layout.item_piaoping, null);
// TextView textView = piaoPingView.findViewById(R.id.tv_name);
// TextView textView2 = piaoPingView.findViewById(R.id.tv_to_name);
// textView2.setText("送给"+mqttBean.getList().getToUserName());
// textView.setText(mqttBean.getList().getFromUserName());
// ImageUtils.loadHeadCC(mqttBean.getList().getGift_picture(), piaoPingView.findViewById(R.id.iv_piaoping));
// TextView tv_time = piaoPingView.findViewById(R.id.tv_num);
// tv_time.setText(mqttBean.getList().getNumber());
// windowManager.addView(piaoPingView, layoutParams);
//
// piaoPingView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
// @Override
// public void onGlobalLayout() {
// piaoPingView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//
// // 设置锚点为左上角,避免偏移干扰
// piaoPingView.setPivotX(0);
// piaoPingView.setPivotY(0);
//
// // 启动动画:从左外滑入 -> 右外滑出
// ObjectAnimator animator = ObjectAnimator.ofFloat(
// piaoPingView,
// "translationX",
// 0f, // 初始偏移为 0此时 View 在左侧外)
// screenWidth // 向右移动整个屏幕宽度
// );
// animator.setDuration(2000); // 整个动画的时长为2秒
//
// // 强制 GPU 渲染
// piaoPingView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
//
// // 延迟显示2秒后开始滑出屏幕的动画
// piaoPingView.postDelayed(new Runnable() {
// @Override
// public void run() {
// animator.start();
// }
// }, 3000);
//
// animator.addListener(new AnimatorListenerAdapter() {
// @Override
// public void onAnimationEnd(Animator animation) {
// windowManager.removeView(piaoPingView);
// }
// });
// }
// });
// }
}

View File

@@ -0,0 +1,5 @@
package com.xscm.moduleutil.activity;
public interface IPresenter {
void detachView();
}

View File

@@ -0,0 +1,12 @@
package com.xscm.moduleutil.activity;
public interface IView<T> {
T getSelfActivity();
void showLoadings();
void showLoadings(String content);
void disLoadings();
}

View File

@@ -0,0 +1,338 @@
package com.xscm.moduleutil.activity;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Handler;
import android.view.View;
import android.webkit.GeolocationPermissions;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.LogUtils;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.databinding.ActivityWebViewBinding;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.tencent.imsdk.v2.V2TIMConversation;
import com.tencent.mm.opensdk.modelbiz.WXOpenCustomerServiceChat;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.tencent.qcloud.tuicore.TUIConstants;
import com.tencent.qcloud.tuikit.tuichat.classicui.page.TUIC2CChatActivity;
import com.tencent.qcloud.tuikit.tuichat.classicui.page.TUIGroupChatActivity;
/**
* @author qx
* @data 2025/6/3
* @description: webview公共方法
*/
@Route(path = ARouteConstants.H5)
public class WebViewActivity extends BaseAppCompatActivity<ActivityWebViewBinding> {
public String title;
public String url;
private ValueCallback<Uri> mUploadMessage;
private ValueCallback<Uri[]> mUploadCallbackAboveL;
private final int REQUEST_FILE_PICKER = 1;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void initData() {
WebSettings webSettings = mBinding.webView.getSettings();
// 禁用水平滚动
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //关闭webview中缓存
//增加JSBridge
mBinding.webView.addJavascriptInterface(new WebAppInterface(this), "Android");
if (title!=null && !title.isEmpty()){
if (title.contains("协议")) {
webSettings.setDisplayZoomControls(false); // 隐藏默认缩放控件
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); // 使用正常布局算法
webSettings.setBuiltInZoomControls(false);
webSettings.setSupportZoom(false);
// 重要:设置布局算法为适应屏幕
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
// 设置初始缩放
mBinding.webView.setInitialScale(100);
mBinding.webView.getSettings().setUseWideViewPort(false);
}else {
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
}
}else {
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
}
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);
webSettings.setDomStorageEnabled(true);
webSettings.setBlockNetworkImage(false);//解决图片不显示
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
mBinding.webView.setHorizontalScrollBarEnabled(false);//水平不显示
mBinding.webView.setVerticalScrollBarEnabled(false); //垂直不显示
mBinding.webView.setScrollbarFadingEnabled(false);
mBinding.webView.setScrollContainer(true);
mBinding.webView.setWebViewClient(new WebViewClient());
mBinding.webView.setBackgroundColor(Color.TRANSPARENT);
mBinding.webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mBinding.webView.requestFocus();
mBinding.webView.loadUrl(url);
mBinding.webView.setWebChromeClient(new WebChromeClient() {
//配置权限同样在WebChromeClient中实现
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (title != null && !title.isEmpty()) {
if (title.contains("协议")) {
if (newProgress >= 100) {
// 页面加载完成后调整文本换行
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// 注入CSS确保文字自动换行
mBinding.webView.loadUrl("javascript:(function() {" +
"var sheets = document.styleSheets;" +
"for (var i = 0; i < sheets.length; i++) {" +
" try {" +
" sheets[i].addRule('*', 'word-wrap: break-word !important; white-space: normal !important; overflow-x: hidden !important;', 0);" +
" } catch(e) {" +
" try {" +
" sheets[i].insertRule('* { word-wrap: break-word !important; white-space: normal !important; overflow-x: hidden !important; }', 0);" +
" } catch(e2) {}" +
" }" +
"}" +
"})()");
}
}, 100);
}
}
}
}
// For Android < 3.0
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
// showFileChooser();
}
// For Android > 4.1.1
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
mUploadMessage = uploadMsg;
// showFileChooser();
}
// For Android > 5.0支持多张上传
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams
fileChooserParams) {
mUploadCallbackAboveL = uploadMsg;
showFileChooser();
return true;
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
// tvTitle.setText(title);
}
});
}
private void showFileChooser() {
// 这里可以扩展为显示对话框让用户选择“拍照”或“从相册选择”
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "选择图片"), REQUEST_FILE_PICKER);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_FILE_PICKER) {
if (mUploadMessage != null) {
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
} else if (mUploadCallbackAboveL != null) {
Uri[] results = null;
if (resultCode == Activity.RESULT_OK && data != null) {
String dataString = data.getDataString();
ClipData clipData = data.getClipData();
if (clipData != null) {
results = new Uri[clipData.getItemCount()];
for (int i = 0; i < clipData.getItemCount(); i++) {
ClipData.Item item = clipData.getItemAt(i);
results[i] = item.getUri();
}
}
if (dataString != null)
results = new Uri[]{Uri.parse(dataString)};
}
mUploadCallbackAboveL.onReceiveValue(results);
mUploadCallbackAboveL = null;
}
}
}
@Override
protected void initView() {
getWindow().getDecorView().setBackgroundResource(com.xscm.moduleutil.R.color.white);
title = getIntent().getStringExtra("title");
url = getIntent().getStringExtra("url");
if (title!=null) {
if (title.equals("举报") || title.equals("等级") || title.equals("公会") || title.equals("邀请") || title.equals("反馈")) {
mBinding.topBar.setVisibility(GONE);
// mBinding.webView.setPadding(0,20,0,0);
} else {
mBinding.topBar.setVisibility(VISIBLE);
mBinding.topBar.setTitle(title);
}
}else {
if (url.equals(CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl()+"/api/Page/page_show?id=6")){
mBinding.topBar.setVisibility(VISIBLE);
mBinding.topBar.setTitle("用户协议");
}else if (url.equals(CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl()+"/api/Page/page_show?id=4")){
mBinding.topBar.setVisibility(VISIBLE);
mBinding.topBar.setTitle("隐私协议");
}else {
mBinding.topBar.setVisibility(GONE);
}
}
}
@Override
protected int getLayoutId() {
return R.layout.activity_web_view;
}
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
// 被 H5 调用的方法
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void closeWeb() {
LogUtils.e("value: ");
finish();
}
@JavascriptInterface
public void customerService() {
String appId = CommonAppContext.getInstance().getCurrentEnvironment().getWxAppId(); // 填移动应用(App)的 AppId
IWXAPI api = WXAPIFactory.createWXAPI(mContext, appId);
// 判断当前版本是否支持拉起客服会话
WXOpenCustomerServiceChat.Req req = new WXOpenCustomerServiceChat.Req();
req.corpId = "ww1de4300858c0b461"; // 企业ID
req.url = "https://work.weixin.qq.com/kfid/kfcb3d23a59c188a0e7"; // 客服URL
api.sendReq(req);
}
@JavascriptInterface
public void jumpRoomPage(String room_id) {
ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS).withString("form", "首页").withString("roomId", room_id).navigation();
}
@JavascriptInterface
public void jumpWebPage(String objects) {
// ARouter.getInstance().build(ARouteConstants.USER_HOME_PAGE).navigation();
ARouter.getInstance().build(ARouteConstants.USER_HOME_PAGE).withString("userId", objects).navigation();
}
@JavascriptInterface
public void enterGroupChat(String group_id,String cover,String guild_name) {
Intent intent = new Intent(mContext, TUIGroupChatActivity.class);
intent.putExtra(TUIConstants.TUIChat.CHAT_ID, group_id);
intent.putExtra(TUIConstants.TUIChat.CHAT_TYPE, V2TIMConversation.V2TIM_GROUP);
mContext.startActivity(intent);
}
@JavascriptInterface
public void chatWithUser(String user_id,String nickname) {
Intent intent = new Intent(mContext, TUIC2CChatActivity.class);
intent.putExtra(TUIConstants.TUIChat.CHAT_ID, user_id);
intent.putExtra(TUIConstants.TUIChat.CHAT_TYPE, V2TIMConversation.V2TIM_C2C);
mContext.startActivity(intent);
}
@JavascriptInterface
public void exchange(){
ARouter.getInstance().build(ARouteConstants.CURRENCY).navigation();
}
@JavascriptInterface
public void Withdrawal() {
ARouter.getInstance().build(ARouteConstants.WITHDRAWAL_ACTIVITY).navigation();
}
@JavascriptInterface
public void enterAuthent() {//实名认证
ARouter.getInstance().build(ARouteConstants.REAL_NAME_ACTIVITY2).navigation();
}
@JavascriptInterface
public void Recharge(){
ARouter.getInstance().build(ARouteConstants.RECHARGE_ACTIVITY).navigation();
}
}
@JavascriptInterface
public void closeWeb() {
//做原生操作
// Intent intent = new Intent(mContext, ListActivity.class);
// intent.putExtra("menuName", msg);
// startActivity(intent);
LogUtils.e("closeWeb");
}
}

View File

@@ -0,0 +1,395 @@
package com.xscm.moduleutil.activity;
import android.webkit.JavascriptInterface;
import com.blankj.utilcode.util.ActivityUtils;
import com.xscm.moduleutil.utils.logger.Logger;
import org.json.JSONObject;
/**
* 项目名称 qipao-android
* 包名com.yutang.xqipao.ui.h5
* 创建人 王欧
* 创建时间 2020/6/16 1:26 PM
* 描述 describe
*/
public class WebViewBridgeConfig {
public static final String NAME = "bridge";
public static final String TYPE_QQ_SERVICE = "qqService";
public static final String TYPE_FEEDBACK = "feedback";
public static final String TYPE_USER_ZONE = "userZone";
public static final String TYPE_RECHARGE = "recharge";
public static final String TYPE_BACK = "onBackPressed";
public static final String TYPE_GAME_RANK = "gameRank";//游戏排行榜
public static final String TYPE_GAME_SOUND = "gameSound";//游戏声音
public static final String TYPE_GAME_END = "gameEnd";//游戏结束
public static final String TYPE_GAME_PAUSE = "gamePause";//游戏暂停
public static final String TYPE_GAME_BEGIN = "gameBegin";//游戏开始
public static final String TYPE_GAME_NEXT = "gameNext";//游戏下一关
private static int gameCount = 0;//游戏次数
private String NextGame = "";//上次游戏名称
private String title = "";//标题
public static final String GAME_EL = "俄罗斯方块";//俄罗斯方块
public static final String GAME_XM = "消灭星星";//消灭星星
public static final String GAME_SB = "神步伐";//神步伐
public static final String GAME_XT = "线条冲刺";//线条冲刺
public static final String GAME_FK = "疯狂赛车";//疯狂赛车
public WebViewBridgeConfig(String title) {
this.title = title;
}
@JavascriptInterface
public void postMessage(String json) {
Logger.e(json);
try {
JSONObject jsonObject = new JSONObject(json);
String type = jsonObject.getString("type");
JSONObject object = jsonObject.getJSONObject("data");
switch (type) {
case TYPE_QQ_SERVICE:
serviceUser();
break;
case TYPE_FEEDBACK:
// ActivityUtils.startActivity(FeedBackActivity.class);
break;
case TYPE_USER_ZONE:
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", object.getString("userId")).navigation();
break;
case TYPE_RECHARGE:
// ARouter.getInstance().build(ARouters.ME_BALANCE).navigation();
break;
case TYPE_BACK:
try {
ActivityUtils.getTopActivity().onBackPressed();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
//跳转QQ客服
private void serviceUser() {
// RemoteDataSource.getInstance().serviceUser(new BaseObserver<String>() {
// @Override
// public void onSubscribe(Disposable d) {
//
// }
//
// @Override
// public void onNext(String uin) {
// try {
// String qqUrl = "mqqwpa://im/chat?chat_type=wpa&uin=" + uin + "&version=1";
// ActivityUtils.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(qqUrl)));
// } catch (Exception e) {
// ToastUtils.showShort("请先安装QQ");
// }
// }
//
// @Override
// public void onComplete() {
//
// }
// });
}
/**
* H5小游戏语音互动调用
*
* @param json
*/
@JavascriptInterface
public void common(String json) {
// ThreadUtils.runOnUiThread(new Runnable() {
// @Override
// public void run() {
// Logger.e(json);
// try {
// JSONObject jsonObject = new JSONObject(json);
// String type = jsonObject.getString("type");
// JSONObject object = jsonObject.getJSONObject("params");
// switch (type) {
// case JOIN_LIVE_ROOM:
// quitLiveRoom();
// RtcManager.getInstance().setGame(true);
// RtcManager.getInstance().leaveChannel();
// //游戏时关闭房间
// ActivityUtils.finishActivity(RoomActivity.class);
// BaseApplication.getInstance().isPlaying = false;
// BaseApplication.getInstance().isShow = false;
// UserBean userBean = BaseApplication.getInstance().getUser();
// RtcManager.getInstance().loginRoomGame(object.getString("roomId"), userBean.getUser_id(), userBean.getNickname(), "");
// break;
// case LEAVE_LIVE_ROOM:
// RtcManager.getInstance().leaveChannel(object.getString("roomId"));
// RtcManager.getInstance().setAudioUrl(null);
// break;
// case ROOM_START_PUBLISH_STREAM:
// RtcManager.getInstance().applyWheat(String.format("%s_%s", object.getString("roomId"), object.getString("userId")));
// break;
// case ROOM_STOP_PUBLISH_STREAM:
// RtcManager.getInstance().downWheat();
// break;
// case ROOM_MUTE_LOCAL:
// RtcManager.getInstance().muteLocalAudioStream(object.getBoolean("mute"));
// break;
// case ROOM_MUTE_MICROPHONE:
// RtcManager.getInstance().muteSpeaker(object.getBoolean("mute"));
// break;
// case ROOM_SHOW_MESSAGE_DIALOG:
// DialogUtils.showDialogFragment(ARouter.getInstance().build(ARouteConstants.ROOM_MSG_DIALOG).navigation());
// break;
// case ON_CLOSE_BTN_CLICK:
// RtcManager.getInstance().leaveChannel();
// ActivityUtils.finishActivity(H5Activity.class);
// break;
// case TYPE_QQ_SERVICE:
// serviceUser();
// break;
// case TYPE_FEEDBACK:
// ActivityUtils.startActivity(FeedBackActivity.class);
// break;
// case TYPE_USER_ZONE:
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", object.getString("userId")).navigation();
// break;
// case TYPE_RECHARGE:
// ARouter.getInstance().build(ARouters.ME_BALANCE).navigation();
// break;
// case TYPE_BACK:
// try {
// ActivityUtils.getTopActivity().onBackPressed();
// } catch (Exception e) {
// e.printStackTrace();
// }
// break;
// //游戏排行榜
// case TYPE_GAME_RANK:
// switch (title) {
// case GAME_EL:
// AppLogUtil.reportAppLog(AppLogEvent.A050303);
// break;
// case GAME_SB:
// AppLogUtil.reportAppLog(AppLogEvent.A050403);
// break;
// case GAME_XM:
// AppLogUtil.reportAppLog(AppLogEvent.A050503);
// break;
// case GAME_XT:
// AppLogUtil.reportAppLog(AppLogEvent.A050603);
// break;
// case GAME_FK:
// AppLogUtil.reportAppLog(AppLogEvent.A050703);
// break;
// }
// break;
// //游戏开始
// case TYPE_GAME_BEGIN:
// switch (title) {
// case GAME_EL:
// if (!TextUtils.isEmpty(NextGame) && GAME_EL.equals(NextGame)) {
// gameCount++;
// }
// break;
// case GAME_SB:
// if (!TextUtils.isEmpty(NextGame) && GAME_SB.equals(NextGame)) {
// gameCount++;
// }
// break;
// case GAME_XM:
// if (!TextUtils.isEmpty(NextGame) && GAME_XM.equals(NextGame)) {
// gameCount++;
// }
// break;
// case GAME_XT:
// if (!TextUtils.isEmpty(NextGame) && GAME_XT.equals(NextGame)) {
// gameCount++;
// }
// break;
// case GAME_FK:
// if (!TextUtils.isEmpty(NextGame) && GAME_FK.equals(NextGame)) {
// gameCount++;
// }
// break;
// }
// if (gameCount == 0) {
// gameCount = 1;
// }
// break;
// //游戏结束
// case TYPE_GAME_END:
// switch (title) {
// case GAME_EL:
// AppLogUtil.reportAppLog(AppLogEvent.A050301, "game_count", String.valueOf(gameCount));
// break;
// case GAME_SB:
// AppLogUtil.reportAppLog(AppLogEvent.A050401, "game_count", String.valueOf(gameCount));
// break;
// case GAME_XM:
// AppLogUtil.reportAppLog(AppLogEvent.A050501, "game_count", String.valueOf(gameCount));
// break;
// case GAME_XT:
// AppLogUtil.reportAppLog(AppLogEvent.A050601, "game_count", String.valueOf(gameCount));
// break;
// case GAME_FK:
// AppLogUtil.reportAppLog(AppLogEvent.A050701, "game_count", String.valueOf(gameCount));
// break;
// }
// break;
// //游戏下一关
// case TYPE_GAME_NEXT:
// switch (title) {
// case GAME_XM:
// AppLogUtil.reportAppLog(AppLogEvent.A050504);
// break;
// case GAME_XT:
// AppLogUtil.reportAppLog(AppLogEvent.A050604);
// break;
// }
// break;
// //游戏暂停
// case TYPE_GAME_PAUSE:
// break;
// //游戏声音
// case TYPE_GAME_SOUND:
// switch (title) {
// case GAME_EL:
// if (!object.getBoolean("sound")) {
// AppLogUtil.reportAppLog(AppLogEvent.A050302);
// }
// break;
// case GAME_SB:
// if (!object.getBoolean("sound")) {
// AppLogUtil.reportAppLog(AppLogEvent.A050402);
// }
// break;
// case GAME_XM:
// if (!object.getBoolean("sound")) {
// AppLogUtil.reportAppLog(AppLogEvent.A050502);
// }
// break;
// case GAME_XT:
// if (!object.getBoolean("sound")) {
// AppLogUtil.reportAppLog(AppLogEvent.A050602);
// }
// break;
// case GAME_FK:
// if (!object.getBoolean("sound")) {
// AppLogUtil.reportAppLog(AppLogEvent.A050702);
// }
// break;
// }
// break;
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// });
}
private void quitLiveRoom() {
// if (!TextUtils.isEmpty(BaseApplication.getInstance().playId)) {
// NewApi.getInstance().quit(BaseApplication.getInstance().playId, new com.qpyy.libcommon.api.BaseObserver<String>(false, false) {
// @Override
// public void onSubscribe(Disposable d) {
//
// }
//
// @Override
// public void onNext(String s) {
//
// }
//
// @Override
// public void onComplete() {
//
// }
// });
// }
}
// 调用示例:
// window.bridge.common('{"type":"joinStreamLiveRoom","params":{"roomId":"12445435","userId":"12323 ","mute":false}}');
// 调用顺序:
// 1、加入直播间 joinStreamLiveRoom
// 2、开始推流 startPublishingStreamLiveRoom
// 3、打开麦克风 muteMicrophoneLiveRoom
/*
加入直播间 joinStreamLiveRoom
params :
{
"roomId":"房间id",
}
*/
public static final String JOIN_LIVE_ROOM = "joinStreamLiveRoom";
/*
离开流房间 推拉流 leaveStreamLiveRoom
params :
{
"roomId":"房间id",
}
*/
public static final String LEAVE_LIVE_ROOM = "leaveStreamLiveRoom";
/*
开始推流 startPublishingStreamLiveRoom
params :
{
"roomId":"房间id",
"userId":"用户ID"
}
*/
public static final String ROOM_START_PUBLISH_STREAM = "startPublishingStreamLiveRoom";
/*
停止推流 stopPublishingStreamLiveRoom
params :
{
"roomId":"房间id",
"userId":"用户ID"
}
*/
public static final String ROOM_STOP_PUBLISH_STREAM = "stopPublishingStreamLiveRoom";
/*
是否屏蔽远端所有声音 muteSpeakerLiveRoom
params :
{
mute:true // true为关闭false为打开
}
*/
public static final String ROOM_MUTE_LOCAL = "muteSpeakerLiveRoom";
/*
是否静音(关闭)麦克风 muteMicrophoneLiveRoom
params :
{
mute:true // true为关闭false为打开
}
*/
public static final String ROOM_MUTE_MICROPHONE = "muteMicrophoneLiveRoom";
/*
点击消息按钮 onMessageBtnClick
params :
{
}
*/
public static final String ROOM_SHOW_MESSAGE_DIALOG = "onMessageBtnClick";
//关闭按钮
public static final String ON_CLOSE_BTN_CLICK = "onCloseBtnClick";
}

View File

@@ -0,0 +1,21 @@
package com.xscm.moduleutil.activity.news;
import android.app.Activity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
import com.xscm.moduleutil.bean.NewsMessageList;
import java.util.List;
public class NewsContacts {
public interface View extends IView<Activity> {
void showNews(List<NewsMessageList> newsList);
void finishRefresh();
}
public interface IHomePre extends IPresenter {
void getMessagetitle(String type,String page,String pageLimit);
}
}

View File

@@ -0,0 +1,35 @@
package com.xscm.moduleutil.activity.news;
import android.content.Context;
import com.xscm.moduleutil.bean.NewsMessageList;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.presenter.BasePresenter;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class NewsPresenter extends BasePresenter<NewsContacts.View> implements NewsContacts.IHomePre {
public NewsPresenter(NewsContacts.View view, Context context) {
super(view, context);
}
@Override
public void getMessagetitle(String type, String page, String pageLimit) {
api.getMessagetitle(type, page, pageLimit, new BaseObserver<List<NewsMessageList>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
MvpRef.get().finishRefresh();
}
@Override
public void onNext(List<NewsMessageList> newsMessageLists) {
MvpRef.get().showNews(newsMessageLists);
}
});
}
}

View File

@@ -0,0 +1,128 @@
package com.xscm.moduleutil.activity.news;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import android.text.Html;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.activity.BaseMvpActivity;
import com.xscm.moduleutil.bean.NewsMessageList;
import com.xscm.moduleutil.databinding.ActivityOfficialNoticeBinding;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.TimeUtils;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import java.util.List;
public class OfficialNoticeActivity extends BaseMvpActivity<NewsPresenter, ActivityOfficialNoticeBinding> implements NewsContacts.View {
private int page = 1;
private BaseQuickAdapter<NewsMessageList, BaseViewHolder> mAdapter;
private String type;
@Override
protected void initData() {
type = getIntent().getStringExtra("type");
if (type.equals("1")) {
mBinding.topBar.setTitle("系统消息");
} else {
mBinding.topBar.setTitle("官方公告");
}
// mBinding.smartRefreshLayout.autoRefresh();
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
page++;
MvpPre.getMessagetitle(type, page + "", "10");
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
page = 1;
MvpPre.getMessagetitle(type, page + "", "10");
}
});
mBinding.recycleView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new BaseQuickAdapter<NewsMessageList, BaseViewHolder>(R.layout.news_rv_item_system_news) {
@Override
protected void convert(BaseViewHolder helper, NewsMessageList item) {
String time = TimeUtils.getDateToStringNoZ(Long.parseLong(item.getCreatetime()) * 1000L);
helper.setText(R.id.tv_sys_time, time);
if (item.getImage()==null || item.getImage().isEmpty()){
helper.getView(R.id.tv_sys_con).setVisibility(VISIBLE);
helper.setText(R.id.tv_sys_con, item.getContent());
helper.getView(R.id.ll_system_official).setVisibility(GONE);
}else {
helper.getView(R.id.tv_sys_con).setVisibility(GONE);
helper.getView(R.id.ll_system_official).setVisibility(VISIBLE);
ImageUtils.loadHeadCC(item.getImage(), helper.getView(R.id.image));
helper.setText(R.id.tv_cont, Html.fromHtml(item.getContent()));
}
helper.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (item.getRoom_id()>0){
ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS).withString("room_id", item.getRoom_id() + "").navigation();
}else if (item.getRoom_id() == 0 && item.getUrl() != null && !item.getUrl().isEmpty()){
ARouter.getInstance().build(ARouteConstants.H5).withString("url", item.getUrl()).navigation();
}
}
});
// if (item.getType().equals("1")) {
// helper.getView(R.id.ll_system_official).setVisibility(GONE);
// } else if (item.getType().equals("2")) {
// helper.getView(R.id.tv_sys_con).setVisibility(GONE);
// helper.getView(R.id.ll_system_official).setVisibility(VISIBLE);
// } else {
// helper.getView(R.id.ll_system_official).setVisibility(GONE);
// }
// helper.getView(R.id.image).setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
//
// }
// });
}
};
mBinding.recycleView.setAdapter(mAdapter);
MvpPre.getMessagetitle(type, "1", "10");
}
@Override
protected int getLayoutId() {
return R.layout.activity_official_notice;
}
@Override
protected NewsPresenter bindPresenter() {
return new NewsPresenter(this, this);
}
@Override
public void showNews(List<NewsMessageList> newsList) {
mAdapter.setNewData(newsList);
}
@Override
public void finishRefresh() {
mBinding.smartRefreshLayout.finishRefresh();
mBinding.smartRefreshLayout.finishLoadMore();
}
}

View File

@@ -0,0 +1,131 @@
package com.xscm.moduleutil.adapter;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import androidx.annotation.NonNull;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.ScreenUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.AppUpdateModel;
import com.xscm.moduleutil.databinding.DialogAppUpdateBinding;
import com.xscm.moduleutil.utils.DownloadListener;
import com.xscm.moduleutil.utils.DownloadUtil;
import com.xscm.moduleutil.utils.logger.Logger;
import com.xscm.moduleutil.widget.dialog.BaseDialog;
public class AppUpdateDialog extends BaseDialog<DialogAppUpdateBinding> implements DownloadListener, View.OnClickListener {
private AppUpdateModel appUpdateModel;
private ProgressDialog mProgressDialog;
public AppUpdateDialog(@NonNull Context context) {
super(context);
}
@Override
public int getLayoutId() {
return R.layout.dialog_app_update;
}
@Override
public void initView() {
Window window = getWindow();
window.setBackgroundDrawableResource(android.R.color.transparent);
window.setLayout((int) (ScreenUtils.getScreenWidth() * 305 / 375), WindowManager.LayoutParams.WRAP_CONTENT);
mBinding.tvContent.setMovementMethod(new ScrollingMovementMethod());
mBinding.btUpdate.setOnClickListener(this::onClick);
}
@Override
public void initData() {
}
@Override
public void onClick(View view) {
if (appUpdateModel != null) {
mProgressDialog = new ProgressDialog(getContext()) {
@Override
public void onBackPressed() {
}
};
mProgressDialog.setMax(100);//设置最大值
mProgressDialog.setTitle("安装包下载");//设置标题
mProgressDialog.setIcon(R.mipmap.ic_launcher);//设置标题小图标
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置样式为横向显示进度的样式
mProgressDialog.incrementProgressBy(0);//设置初始值为0其实可以不用设置默认就是0
mProgressDialog.setIndeterminate(false);//是否精确显示对话框flase为是反之为否
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setMessage("下载中请稍等!!!");
mProgressDialog.show();
DownloadUtil downloadUtil = new DownloadUtil(getContext());
downloadUtil.downloadFile(appUpdateModel.getUrl(), this);
}
}
public void setAppUpdateModel(AppUpdateModel appUpdateModel) {
this.appUpdateModel = appUpdateModel;
mBinding.tvContent.setText(TextUtils.isEmpty(appUpdateModel.getContent()) ? "修复旧版本已知bug" : Html.fromHtml(appUpdateModel.getContent()));
}
@Override
public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
return true;
}
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onStart() {
}
@Override
public void onProgress(int currentLength) {
if (mProgressDialog != null) {
mProgressDialog.setProgress(currentLength);
}
}
@Override
public void onFinish(String localPath) {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
try {
AppUtils.installApp(localPath);
} catch (Exception e) {
Logger.e("installAppError", e);
onFailure();
}
dismiss();
}
@Override
public void onFailure() {
ToastUtils.showShort("下载失败前往浏览器手动更新");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri url = Uri.parse(appUpdateModel.getUrl());
intent.setData(url);
getContext().startActivity(intent);
}
}

View File

@@ -0,0 +1,99 @@
package com.xscm.moduleutil.adapter;
import androidx.annotation.NonNull;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.RechargeBean;
import java.util.List;
/**
* 充值adapter
*/
public class BalanceRechargeAdapter extends BaseMultiItemQuickAdapter<RechargeBean, BaseViewHolder> {
private int selectedPosition = -1;
private OnRechargeItemClickListener listener;
private InputBoxVisibilityListener inputBoxVisibilityListener;
public static final int ITEM_TYPE_NORMAL = 0;
public static final int ITEM_TYPE_FOOTER = 1;
public BalanceRechargeAdapter(@NonNull List<RechargeBean> data) {
super(data);
// 初始化 item 类型
addItemType(ITEM_TYPE_NORMAL, R.layout.rv_item_balance_recharge);
addItemType(ITEM_TYPE_FOOTER, R.layout.rv_item_footer);
}
@Override
public int getItemViewType(int position) {
RechargeBean item = getData().get(position);
return item.getItemViewType(); // 使用 bean 中的 itemViewType
}
@Override
protected void convert(BaseViewHolder helper, RechargeBean item) {
int type = helper.getItemViewType();
if (type == ITEM_TYPE_NORMAL) {
// 正常 item 显示逻辑
helper.setText(R.id.tv_gold_num, item.getCoins());
helper.setText(R.id.tv_money, String.format("¥%s", item.getMoney()));
if (selectedPosition == helper.getAdapterPosition()) {
helper.setBackgroundRes(R.id.cl_item, com.xscm.moduleutil.R.drawable.bg_10_white_sele);
} else {
helper.setBackgroundRes(R.id.cl_item, com.xscm.moduleutil.R.drawable.bg_r10_white);
}
helper.getView(R.id.cl_item).setOnClickListener(v -> {
selectedPosition = helper.getAdapterPosition();
if (listener != null) {
listener.onClick(item);
}
notifyDataSetChanged();
// 隐藏输入框
if (inputBoxVisibilityListener != null) {
inputBoxVisibilityListener.onInputBoxVisibilityChanged(false);
}
});
} else if (type == ITEM_TYPE_FOOTER) {
helper.setText(R.id.tv_gold_num, "自定义");
helper.getView(R.id.tv_gold_num).setOnClickListener(v -> {
clearSelect(); // 清除所有选中状态
notifyDataSetChanged();
// 显示输入框
if (inputBoxVisibilityListener != null) {
inputBoxVisibilityListener.onInputBoxVisibilityChanged(true);
}
});
}
}
public interface OnRechargeItemClickListener {
void onClick(RechargeBean rechargeBean);
}
public void setListener(OnRechargeItemClickListener listener) {
this.listener = listener;
}
public interface InputBoxVisibilityListener {
void onInputBoxVisibilityChanged(boolean isVisible);
}
public void setInputBoxVisibilityListener(InputBoxVisibilityListener listener) {
this.inputBoxVisibilityListener = listener;
}
/**
* 取消所有选中
*/
public void clearSelect() {
selectedPosition = -1;
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,312 @@
package com.xscm.moduleutil.adapter;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static com.blankj.utilcode.util.ActivityUtils.startActivity;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.TimeUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.CircleListBean;
import com.xscm.moduleutil.bean.HeatedBean;
import com.xscm.moduleutil.utils.MeHeadView;
import com.xscm.moduleutil.utils.NumberFormatUtils;
import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.widget.MyGridView;
import com.xscm.moduleutil.widget.img.FullScreenUtil;
import java.util.List;
public class CirleListAdapter extends BaseQuickAdapter<CircleListBean, BaseViewHolder> {
public static final int PAGE_HOME = 0; // 首页
public static final int PAGE_SEARCH = 2; // 点击头像进入的
private int mPageType;
public CirleListAdapter(int pageType) {
super(R.layout.item_cirle_list);
this.mPageType = pageType;
}
public interface OnItemClickListener {
void onDianzanClick(CircleListBean item);
void onHeadImageClick(CircleListBean item);
void onZsClick(CircleListBean item);
void onDiandianClick(CircleListBean item);
void onPinglunClick(CircleListBean item);
void onRelaClick(CircleListBean item);
void onGensui(CircleListBean item);
}
private OnItemClickListener mListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.mListener = listener;
}
@Override
protected void convert(BaseViewHolder helper, CircleListBean item) {
helper.addOnClickListener(com.xscm.moduleutil.R.id.dianzan)
.addOnClickListener(R.id.dy_lookmore_tv)
.addOnClickListener(R.id.dy_head_image)
.addOnClickListener(R.id.diandian)
.addOnClickListener(R.id.pinglun)
.addOnClickListener(R.id.rela)
.addOnClickListener(R.id.gensui)
.addOnClickListener(com.xscm.moduleutil.R.id.zs);
//先让单图,多图,音频的布局显示
helper.getView(R.id.dy_image_recyc).setVisibility(VISIBLE);
helper.getView(R.id.iv_jubao).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent = new Intent(mContext, UserHomepageActivity.class);
// intent.putExtra("userId", SpUtil.getUserId()+"");
// startActivity(intent);
}
});
// 设置点击回调
helper.getView(com.xscm.moduleutil.R.id.dianzan).setOnClickListener(v -> {
if (mListener != null){
mListener.onDianzanClick(item);
}
});
helper.getView(com.xscm.moduleutil.R.id.dy_head_image).setOnClickListener(v -> {
if (mListener != null) mListener.onHeadImageClick(item);
});
helper.getView(com.xscm.moduleutil.R.id.zs).setOnClickListener(v -> {
if (mListener != null) mListener.onZsClick(item);
});
helper.getView(R.id.diandian).setOnClickListener(v -> {
if (mListener != null) mListener.onDiandianClick(item);
});
helper.getView(R.id.pinglun).setOnClickListener(v -> {
if (mListener != null) mListener.onPinglunClick(item);
});
helper.getView(R.id.rela).setOnClickListener(v -> {
if (mListener != null) mListener.onRelaClick(item);
});
helper.getView(R.id.gensui).setOnClickListener(v -> {
if (mListener != null) mListener.onGensui(item);
});
// 为整个 item 设置点击事件
helper.itemView.setOnClickListener(v -> {
if (mListener != null) {
mListener.onPinglunClick(item); // 复用 onHeadImageClick 作为跳转逻辑
}
});
//昵称
helper.setText(R.id.dy_name_text, item.getNickname());
//头像
// ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.dy_head_image));
MeHeadView headView = helper.getView(R.id.dy_head_image);
headView.setData(item.getAvatar(), "", item.getSex() + "");
//动态内容以富文本展示
String content = item.getContent();
if (content == null || content.length() == 0) {
helper.getView(R.id.dy_lookmore_tv).setVisibility(GONE);
helper.getView(R.id.dy_content_tv).setVisibility(GONE);
} else {
helper.getView(R.id.dy_lookmore_tv).setVisibility(VISIBLE);
helper.getView(R.id.dy_content_tv).setVisibility(VISIBLE);
}
helper.getView(R.id.dy_lookmore_tv).getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
//这个回调会调用多次,获取完行数记得注销监听
TextView view = helper.getView(R.id.dy_content_tv);
int lineCount = view.getLineCount();
if (lineCount >= 7) {
helper.getView(R.id.dy_lookmore_tv).setVisibility(VISIBLE);
helper.getView(R.id.dy_content_tv).getViewTreeObserver().removeOnPreDrawListener(this);//销毁
} else {
helper.getView(R.id.dy_lookmore_tv).setVisibility(GONE);
helper.getView(R.id.dy_content_tv).getViewTreeObserver().removeOnPreDrawListener(this);//销毁
}
return true;
}
});
if (TextUtils.isEmpty(content)) {
TextView view = helper.getView(R.id.dy_content_tv);
view.setVisibility(GONE);
} else {
TextView view = helper.getView(R.id.dy_content_tv);
view.setVisibility(VISIBLE);
}
// 创建 SpannableString 来拼接 title 并设置点击事件
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
spannableStringBuilder.append(content).append(" "); // 添加原始内容
if (item.getTitle() != null) {
for (int i = 0; i < item.getTitle().size(); i++) {
HeatedBean heatedBean = item.getTitle().get(i);
String title = heatedBean != null ? heatedBean.getTitle() : "";
// 添加 title 到 SpannableString
spannableStringBuilder.append(title);
// 创建点击事件和颜色
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
// 处理点击事件,比如跳转
// Intent intent = new Intent(mContext, TargetActivity.class);
// intent.putExtra("url", item.getUrl()); // 传递 URL 或其他参数
// mContext.startActivity(intent);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(ContextCompat.getColor(mContext, R.color.colorPrimary)); // 设置文字颜色
ds.setUnderlineText(false); // 去掉下划线
}
};
// 设置点击效果
spannableStringBuilder.setSpan(clickableSpan, spannableStringBuilder.length() - title.length(), spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
TextView textView = helper.getView(R.id.dy_content_tv);
textView.setMovementMethod(LinkMovementMethod.getInstance()); // 允许点击
textView.setHighlightColor(0); // 去掉点击时的背景色
textView.setText(spannableStringBuilder);
}
if (item.getIs_like() == 1) {
helper.setImageResource(R.id.dianzan_image, R.mipmap.dongtai_hudong_yidianzan);
// helper.setText(R.id.dy_fabulous, String.valueOf(Integer.parseInt(item.getLike_num()) + 1));
} else {
helper.setImageResource(R.id.dianzan_image, com.xscm.moduleutil.R.mipmap.dongtai_hudong_dianzan);
// helper.setText(R.id.dy_fabulous, item.getLike_num());
}
helper.setText(R.id.dy_fabulous, item.getLike_num());
if (mPageType==PAGE_SEARCH){
helper.setVisible(R.id.gensui, false);
}else {
if (item.getUser_id()==SpUtil.getUserId()){
helper.setVisible(R.id.gensui, false);
}else {
helper.setVisible(R.id.gensui, true);
}
}
if (item.getRoom_id() != null && !item.getRoom_id().equals("0")) {
helper.setText(R.id.gensui, "跟随");
} else if (item.getRoom_id() == null || item.getRoom_id().equals("0")){
helper.setText(R.id.gensui, "私信");
}
//分享数
// helper.setText(R.id.dy_zs, item.getRewards_num() != null ? item.getRewards_num() : "0");
double rewardNum = item.getRewards_num() != null ? Double.parseDouble(item.getRewards_num()) : 0;
helper.setText(R.id.dy_zs, NumberFormatUtils.formatRewardNumber(rewardNum));
//评论数
helper.setText(R.id.dy_comment, item.getComment_num() + "");
//时间
if (!item.getCreatetime().isEmpty()) {
try {
helper.setText(R.id.dy_time_text, TimeUtils.millis2String(Long.parseLong(item.getCreatetime()) * 1000));
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
//显示图片
if (item.getImages() != null && !item.getImages().isEmpty()) {
String[] arrIv = item.getImages().split(",");
OneImageYuanJiaoAdapter oneImageYuanJiaoAdapter = new OneImageYuanJiaoAdapter(mContext);
MyGridView recyclerView = helper.getView(R.id.dy_image_recyc);
recyclerView.setNumColumns(3);
recyclerView.setAdapter(oneImageYuanJiaoAdapter);
oneImageYuanJiaoAdapter.getList_adapter().clear();
for (int j = 0; j < arrIv.length; j++) {
oneImageYuanJiaoAdapter.getList_adapter().add(arrIv[j]);
}
oneImageYuanJiaoAdapter.notifyDataSetChanged();
recyclerView.setOnItemClickListener((parent, view, position, id) -> {
FullScreenUtil.showFullScreenDialog(mContext, position, oneImageYuanJiaoAdapter.getList_adapter());
});
}else {
helper.getView(R.id.dy_image_recyc).setVisibility(View.GONE);
}
if (item.getLike_list() == null){
helper.getView(R.id.rela).setVisibility(GONE);
helper.getView(R.id.view).setVisibility(VISIBLE);
}else {
helper.getView(R.id.rela).setVisibility(VISIBLE);
helper.getView(R.id.view).setVisibility(GONE);
RecyclerView recyclerView= helper.getView(R.id.recycle_view);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
LikeUserAdapter<CircleListBean.LikeList> likeUserAdapter = new LikeUserAdapter<>();
recyclerView.setAdapter(likeUserAdapter);
likeUserAdapter.setNewData(item.getLike_list());
helper.setText(R.id.pinglun_tv, item.getLike_num()+"人点赞");
}
}
public static final String PAYLOAD_LIKE = "like";
public void updateLikeStatusOnly(int position, int isLike) {
notifyItemChanged(position, PAYLOAD_LIKE);
}
@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, int position, @NonNull List<Object> payloads) {
if (payloads.isEmpty()) {
onBindViewHolder(holder, position); // 全量绑定
} else {
for (Object payload : payloads) {
if (payload.equals(PAYLOAD_LIKE)) {
CircleListBean item = getData().get(position);
if (item.getIs_like() == 1) {
holder.setImageResource(R.id.dianzan_image, R.mipmap.dongtai_hudong_yidianzan);
holder.setText(R.id.dy_fabulous, String.valueOf(Integer.parseInt(item.getLike_num()) + 1));
} else {
holder.setImageResource(R.id.dianzan_image, com.xscm.moduleutil.R.mipmap.dongtai_hudong_dianzan);
holder.setText(R.id.dy_fabulous, item.getLike_num());
}
}
}
}
}
}

View File

@@ -0,0 +1,214 @@
package com.xscm.moduleutil.adapter;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.TimeUtils;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.CommentBean;
import com.xscm.moduleutil.utils.MeHeadView;
import com.xscm.moduleutil.utils.SpUtil;
import java.util.ArrayList;
import java.util.List;
public class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.CommentViewHolder> {
public interface OnCommentInteractionListener {
void onInputBoxShow(int id,String s,int position,String replyTo);
void onDetaleClick(int id,int position);
// 新增长按回调
void onCommentLongClick(CommentBean.CommentDetailsBean comment, CommentBean.CommentDetailsBean.Replies reply, int position);
}
private OnCommentInteractionListener listener; // 新增监听器引用
public void setOnCommentInteractionListener(OnCommentInteractionListener listener) {
this.listener = listener;
}
private List<CommentBean.CommentDetailsBean> commentList;
private static FragmentManager fragmentManager = null;
public CommentAdapter(List<CommentBean.CommentDetailsBean> commentList) {
this.commentList = commentList;
}
public void updateData(List<CommentBean.CommentDetailsBean> newReplyList) {
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CommentDiffCallback(this.commentList, newReplyList));
this.commentList.clear();
this.commentList.addAll(newReplyList);
diffResult.dispatchUpdatesTo(this);
}
@NonNull
@Override
public CommentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment, parent, false);
return new CommentViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CommentViewHolder holder, int position) {
CommentBean.CommentDetailsBean comment = commentList.get(position);
holder.bind(comment, listener, position);
}
@Override
public int getItemCount() {
return commentList.size();
}
static class CommentViewHolder extends RecyclerView.ViewHolder {
private MeHeadView ivAvatar;
private TextView tvNickname;
private TextView tvContent;
private RecyclerView rvReplies;
private TextView btnReply,btnDetale;
private TextView tvTime;
private TextView btnShowAllReplies;
private TextView tv_send;
private EditText et_input;
public CommentViewHolder(@NonNull View itemView) {
super(itemView);
ivAvatar = itemView.findViewById(R.id.iv_avatar);
tvNickname = itemView.findViewById(R.id.tv_nickname);
tvContent = itemView.findViewById(R.id.tv_content);
rvReplies = itemView.findViewById(R.id.rv_replies);
btnReply = itemView.findViewById(R.id.btn_reply);
btnDetale=itemView.findViewById(R.id.btn_detale);
tvTime = itemView.findViewById(R.id.tv_time);
btnShowAllReplies = itemView.findViewById(R.id.btn_show_all_replies);
tv_send= itemView.findViewById(R.id.tv_send);
et_input= itemView.findViewById(R.id.et_input);
// 设置子评论的适配器
LinearLayoutManager layoutManager = new LinearLayoutManager(itemView.getContext());
rvReplies.setLayoutManager(layoutManager);
ReplyAdapter replyAdapter = new ReplyAdapter(new ArrayList<>());
rvReplies.setAdapter(replyAdapter);
}
public void bind(CommentBean.CommentDetailsBean comment, OnCommentInteractionListener listener, int position) {
// 绑定主评论数据
tvNickname.setText(comment.getNickname());
tvContent.setText(comment.getContent());
ivAvatar.setData(comment.getAvatar(), "","");
// 加载用户头像(使用 Glide 或其他图片加载库)
// Glide.with(itemView).load(comment.getAvatar()).into(ivAvatar);
if (comment.getUser_id()==SpUtil.getUserId()){
btnDetale.setVisibility(View.VISIBLE);
}else {
btnDetale.setVisibility(View.GONE);
}
tvTime.setText(TimeUtils.millis2String(Long.parseLong(comment.getCreatetime()+"") * 1000));
// 绑定子评论数据
ReplyAdapter replyAdapter = (ReplyAdapter) rvReplies.getAdapter();
if (replyAdapter != null) {
if (comment.getReplies() != null&& comment.getReplies().size() > 0) {
rvReplies.setVisibility(VISIBLE);
replyAdapter.updateData(comment.getReplies());
// 控制“全部评论...”按钮的显示
btnShowAllReplies.setVisibility(comment.getReplies().size() > 2 ? VISIBLE : GONE);
btnShowAllReplies.setOnClickListener(v -> {
replyAdapter.setExpanded(true); // 展开所有评论
btnShowAllReplies.setVisibility(GONE); // 隐藏按钮
});
replyAdapter.setOnReplyClickListener((reply, position1) -> {
if (listener != null) {
// 构造回复内容(如 @用户名)
String replyContent = "@" + reply.getNickname() + " ";
listener.onInputBoxShow(reply.getPid(), replyContent, getAdapterPosition(),reply.getReply_to()+"");
}
});
replyAdapter.setOnReplyLongClickListener((reply, replyPosition) -> {
if (listener != null) {
// 转发到Activity
listener.onCommentLongClick(comment,reply, replyPosition);
}
});
}else {
rvReplies.setVisibility(GONE);
}
}
// 点击回复按钮
btnReply.setOnClickListener(v -> {
if (listener != null) {
// 传递需要的参数
listener.onInputBoxShow(comment.getId(), "", position,"");
}
});
btnDetale.setOnClickListener(v -> {
if (listener != null) {
listener.onDetaleClick(comment.getId(), position); // 点击删除按钮
}
});
// if (comment.getUser_id()!= SpUtil.getUserId()){
// btnReply.setVisibility(GONE);
// }else {
// btnReply.setVisibility(VISIBLE);
// }
// 添加长按监听
itemView.setOnLongClickListener(v -> {
if (listener != null) {
listener.onCommentLongClick(comment, null,position);
}
return true; // 消费事件
});
}
}
static class CommentDiffCallback extends DiffUtil.Callback {
private final List<CommentBean.CommentDetailsBean> oldList;
private final List<CommentBean.CommentDetailsBean> newList;
public CommentDiffCallback(List<CommentBean.CommentDetailsBean> oldList, List<CommentBean.CommentDetailsBean> newList) {
this.oldList = oldList;
this.newList = newList;
}
@Override
public int getOldListSize() {
return oldList.size();
}
@Override
public int getNewListSize() {
return newList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return oldList.get(oldItemPosition).getId() == newList.get(newItemPosition).getId();
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return oldList.get(oldItemPosition).equals(newList.get(newItemPosition));
}
}
}

View File

@@ -0,0 +1,108 @@
package com.xscm.moduleutil.adapter;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/9
*@description:可动态添加和删除的viewPage适配器
*/
public class CommonPageAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragmentList = new ArrayList<>();
private List<Integer> mItemIdList = new ArrayList<>();
private int id = 0;
private FragmentManager mFm;
public CommonPageAdapter(FragmentManager fm, @NonNull List<Fragment> fragmentList) {
super(fm);
this.mFm = fm;
for (Fragment fragment : fragmentList) {
this.mFragmentList.add(fragment);
mItemIdList.add(id++);
}
}
public CommonPageAdapter(FragmentManager fm) {
super(fm);
}
public List<Fragment> getFragmentList() {
return mFragmentList;
}
public void addPage(int index, Fragment fragment) {
mFragmentList.add(index, fragment);
mItemIdList.add(index, id++);
notifyDataSetChanged();
}
public void addPage(Fragment fragment) {
mFragmentList.add(fragment);
mItemIdList.add(id++);
notifyDataSetChanged();
}
public void delPage(int index) {
mFragmentList.remove(index);
mItemIdList.remove(index);
notifyDataSetChanged();
}
public void updatePage(List<Fragment> fragmentList) {
mFragmentList.clear();
mItemIdList.clear();
for (int i = 0; i < fragmentList.size(); i++) {
mFragmentList.add(fragmentList.get(i));
mItemIdList.add(id++);//注意这里是id++不是i++。
}
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
/**
* 返回值有三种,
* POSITION_UNCHANGED 默认值,位置没有改变
* POSITION_NONE item已经不存在
* position item新的位置
* 当position发生改变时这个方法应该返回改变后的位置以便页面刷新。
*/
@Override
public int getItemPosition(Object object) {
if (object instanceof Fragment) {
if (mFragmentList.contains(object)) {
return mFragmentList.indexOf(object);
} else {
return POSITION_NONE;
}
}
return super.getItemPosition(object);
}
public void updateFragments(List<Fragment> newFragments) {
this.mFragmentList.clear();
this.mFragmentList.addAll(newFragments);
notifyDataSetChanged();
}
@Override
public long getItemId(int position) {
return mItemIdList.get(position);
}
}

View File

@@ -0,0 +1,44 @@
package com.xscm.moduleutil.adapter;
import android.view.View;
import android.view.ViewGroup;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.ScreenUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.HeavenGiftBean;
import com.xscm.moduleutil.utils.ImageUtils;
public class GiftAdapter extends BaseQuickAdapter<HeavenGiftBean, BaseViewHolder> {
//类型 1金币2礼物3坐骑4头像框":
private final int COIN_TYPE = 1;
private final int GIFT_TYPE = 2;
private final int MOUNT_TYPE = 3;
private final int HEAD_TYPE = 4;
public GiftAdapter() {
super(R.layout.item_gift);
}
@Override
protected void convert(BaseViewHolder helper, HeavenGiftBean item) {
ImageUtils.loadHeadCC(item.getPicture(), helper.getView(R.id.iv_head));
helper.getView(R.id.im_jb).setVisibility(View.VISIBLE);
if (item.getType() == COIN_TYPE) {
helper.setText(R.id.tv_gift_time, String.format("%s", item.getGold()));
} else if (item.getType() == GIFT_TYPE) {
helper.getView(R.id.im_jb).setVisibility(View.GONE);
helper.setText(R.id.tv_gift_time, String.format("*%s", item.getQuantity()));
} else {
helper.getView(R.id.im_jb).setVisibility(View.GONE);
helper.setText(R.id.tv_gift_time, String.format("%s天", item.getDays()));
}
helper.setText(R.id.tv_head_name, item.getTitle());
ViewGroup.LayoutParams layoutParams = helper.itemView.getLayoutParams();
layoutParams.width = ((ScreenUtils.getScreenWidth() - ConvertUtils.dp2px(140)) / 4);
layoutParams.height = 259;
helper.itemView.setLayoutParams(layoutParams);
}
}

View File

@@ -0,0 +1,171 @@
package com.xscm.moduleutil.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.GiftPackBean;
import com.xscm.moduleutil.event.RoomGiftPackToEvent;
import com.xscm.moduleutil.utils.ImageUtils;
import org.greenrobot.eventbus.EventBus;
import java.lang.ref.WeakReference;
import java.util.List;
/**
* @Author lxj$
* @Time 2025年7月29日23:36:25$ $
* @Description 背包礼物适配器$
*/
public class GiftPackAdapter extends BaseAdapter {
private final List<GiftPackBean> mDatas;
private final LayoutInflater inflater;
private final Context mContext;
private final MyGestureDetector gestureDetector;
private final String type;
/**
* 页数下标,从0开始(当前是第几页)
*/
private final int curIndex;
/**
* 每一页显示的个数
*/
private final int pageSize = 100;
public GiftPackAdapter(Context context, List<GiftPackBean> mDatas, int curIndex, String type) {
inflater = LayoutInflater.from(context);
this.mDatas = mDatas;
this.curIndex = curIndex;
this.mContext = context;
this.type = type;
this.gestureDetector = new MyGestureDetector(mContext);
}
/**
* 先判断数据集的大小是否足够显示满本页mDatas.size() > (curIndex+1)*pageSize,
* 如果够则直接返回每一页显示的最大条目个数pageSize,
* 如果不够,则有几项返回几,(mDatas.size() - curIndex * pageSize);(也就是最后一页的时候就显示剩余item)
*/
@Override
public int getCount() {
return mDatas.size() > (curIndex + 1) * pageSize ? pageSize : (mDatas.size() - curIndex * pageSize);
}
@Override
public GiftPackBean getItem(int position) {
return mDatas.get(position + curIndex * pageSize);
}
@Override
public long getItemId(int position) {
return position + (long) curIndex * pageSize;
}
private static class MyGestureDetector extends GestureDetector {
private static WeakReference<GiftPackAdapter> sAdapter = new WeakReference<>(null);
private static GiftPackBean sGiftModel;
private GiftPackAdapter mAdapter;
private GiftPackBean mGiftModel;
public void setGiftModel(GiftPackAdapter adapter, GiftPackBean gift) {
sAdapter = new WeakReference<>(adapter);
sGiftModel = gift;
}
private static final SimpleOnGestureListener sSimpleOnGestureListener = new SimpleOnGestureListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
EventBus.getDefault().post(new RoomGiftPackToEvent(sAdapter.get(), sGiftModel, 1));
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
EventBus.getDefault().post(new RoomGiftPackToEvent(sAdapter.get(), sGiftModel, 2));
return true;
}
};
public MyGestureDetector(Context context) {
super(context, sSimpleOnGestureListener);
setOnDoubleTapListener(sSimpleOnGestureListener);
}
}
@Override
@SuppressLint({"SetTextI18n", "ClickableViewAccessibility"})
public View getView(int position, View convertView, ViewGroup parent) {
GiftPackAdapter.ViewHolder viewHolder;
GiftPackBean giftModel = getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_gift_room, parent, false);
viewHolder = new GiftPackAdapter.ViewHolder();
viewHolder.tv_gift_name = (TextView) convertView.findViewById(R.id.tv_gift_name);
viewHolder.tv_gift_price = (TextView) convertView.findViewById(R.id.tv_gift_price);
viewHolder.iv_gift_pic = (ImageView) convertView.findViewById(R.id.iv_gift_pic);
viewHolder.item_layout = (ConstraintLayout) convertView.findViewById(R.id.cl_gift);
viewHolder.ivDownOn = (ImageView) convertView.findViewById(R.id.iv_down_on);
viewHolder.cl_iv_down_on = (ConstraintLayout) convertView.findViewById(R.id.cl_iv_down_on);
convertView.setTag(viewHolder);
} else {
viewHolder = (GiftPackAdapter.ViewHolder) convertView.getTag();
}
viewHolder.item_layout.setOnClickListener(v -> {
// RoonGiftModel clickedModel = (RoonGiftModel) v.getTag();
EventBus.getDefault().post(new RoomGiftPackToEvent(this, giftModel, 1));
});
//设置礼物名字
viewHolder.tv_gift_name.setText(giftModel.getGift_name());
//设置礼物价格
String surplusTxt = giftModel.getGift_price();
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(surplusTxt);
//ForegroundColorSpan 为文字前景色BackgroundColorSpan为文字背景色
ForegroundColorSpan redSpan = new ForegroundColorSpan(mContext.getResources().getColor(R.color.color_FFA9A9A9));
stringBuilder.setSpan(redSpan, surplusTxt.length(), surplusTxt.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//修改最后两个字体的颜色
viewHolder.tv_gift_price.setText(stringBuilder);
// viewHolder.item_layout.setTag(R.id.id_gift_tag, giftModel);
//加载礼物图片
ImageUtils.loadImageView(giftModel.getBase_image(), viewHolder.iv_gift_pic);
//设置选中后的样式
if (giftModel.isChecked()) {//被选中
viewHolder.cl_iv_down_on.setBackgroundResource(R.mipmap.room_gift_bjx);
viewHolder.ivDownOn.setVisibility(View.GONE);
} else {
viewHolder.ivDownOn.setVisibility(View.GONE);
viewHolder.cl_iv_down_on.setBackgroundResource(0);
}
return convertView;
}
static class ViewHolder {
public ConstraintLayout item_layout;
public TextView tv_gift_name, tv_gift_price, tv_gift_num;
public ImageView iv_gift_pic;
public TextView tv_gift_change_love_values;
public ImageView ivDownOn;
public ConstraintLayout cl_iv_down_on;
}
}

View File

@@ -0,0 +1,227 @@
package com.xscm.moduleutil.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.event.RoomGiftClickToEvent;
import com.xscm.moduleutil.utils.ImageUtils;
import org.greenrobot.eventbus.EventBus;
import java.lang.ref.WeakReference;
import java.util.List;
public class GiftRoomAdapter extends BaseAdapter {
private final List<RoonGiftModel> mDatas;
private final LayoutInflater inflater;
private final Context mContext;
private final MyGestureDetector gestureDetector;
private final String type;
/**
* 页数下标,从0开始(当前是第几页)
*/
private final int curIndex;
/**
* 每一页显示的个数
*/
private final int pageSize = 100;
public GiftRoomAdapter(Context context, List<RoonGiftModel> mDatas, int curIndex, String type) {
inflater = LayoutInflater.from(context);
this.mDatas = mDatas;
this.curIndex = curIndex;
this.mContext = context;
this.type = type;
this.gestureDetector = new MyGestureDetector(mContext);
}
/**
* 先判断数据集的大小是否足够显示满本页mDatas.size() > (curIndex+1)*pageSize,
* 如果够则直接返回每一页显示的最大条目个数pageSize,
* 如果不够,则有几项返回几,(mDatas.size() - curIndex * pageSize);(也就是最后一页的时候就显示剩余item)
*/
@Override
public int getCount() {
return mDatas.size() > (curIndex + 1) * pageSize ? pageSize : (mDatas.size() - curIndex * pageSize);
}
@Override
public RoonGiftModel getItem(int position) {
return mDatas.get(position + curIndex * pageSize);
}
@Override
public long getItemId(int position) {
return position + (long) curIndex * pageSize;
}
private static class MyGestureDetector extends GestureDetector {
private static WeakReference<GiftRoomAdapter> sAdapter = new WeakReference<>(null);
private static RoonGiftModel sGiftModel;
private GiftRoomAdapter mAdapter;
private RoonGiftModel mGiftModel;
public void setGiftModel(GiftRoomAdapter adapter, RoonGiftModel gift) {
sAdapter = new WeakReference<>(adapter);
sGiftModel = gift;
}
private static final SimpleOnGestureListener sSimpleOnGestureListener = new SimpleOnGestureListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
EventBus.getDefault().post(new RoomGiftClickToEvent(sAdapter.get(), sGiftModel, 1));
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
EventBus.getDefault().post(new RoomGiftClickToEvent(sAdapter.get(), sGiftModel, 2));
return true;
}
};
public MyGestureDetector(Context context) {
super(context, sSimpleOnGestureListener);
setOnDoubleTapListener(sSimpleOnGestureListener);
}
}
// private static class MyGestureDetector extends GestureDetector {
// private GiftRoomAdapter mAdapter;
// private RoonGiftModel mGiftModel;
//
// public MyGestureDetector(Context context) {
// super(context, new SimpleOnGestureListener() {
// @Override
// public boolean onSingleTapConfirmed(MotionEvent e) {
// if (mAdapter != null && mGiftModel != null) {
// EventBus.getDefault().post(new RoomGiftClickToEvent(mAdapter, mGiftModel, 1));
// }
// return true;
// }
//
// @Override
// public boolean onDoubleTap(MotionEvent e) {
// if (mAdapter != null && mGiftModel != null) {
// EventBus.getDefault().post(new RoomGiftClickToEvent(mAdapter, mGiftModel, 2));
// }
// return true;
// }
// });
// setOnDoubleTapListener(getListener());
// }
//
// public void setGiftModel(GiftRoomAdapter adapter, RoonGiftModel giftModel) {
// this.mAdapter = adapter;
// this.mGiftModel = giftModel;
// }
// }
@Override
@SuppressLint({"SetTextI18n", "ClickableViewAccessibility"})
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
RoonGiftModel giftModel = getItem(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_gift_room, parent, false);
viewHolder = new ViewHolder();
viewHolder.tv_gift_name = (TextView) convertView.findViewById(R.id.tv_gift_name);
viewHolder.tv_gift_price = (TextView) convertView.findViewById(R.id.tv_gift_price);
viewHolder.iv_gift_pic = (ImageView) convertView.findViewById(R.id.iv_gift_pic);
viewHolder.item_layout = (ConstraintLayout) convertView.findViewById(R.id.cl_gift);
viewHolder.ivDownOn = (ImageView) convertView.findViewById(R.id.iv_down_on);
viewHolder.cl_iv_down_on = (ConstraintLayout) convertView.findViewById(R.id.cl_iv_down_on);
// viewHolder.tv_gift_num = convertView.findViewById(R.id.tv_gift_num);
// viewHolder.tv_gift_change_love_values = convertView.findViewById(R.id.tv_gift_change_love_values);
// viewHolder.item_layout.setOnTouchListener((v, event) -> {
// gestureDetector.setGiftModel(GiftRoomAdapter.this, giftModel);
// gestureDetector.onTouchEvent(event);
//
// return true;
// });
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.item_layout.setOnClickListener(v -> {
// RoonGiftModel clickedModel = (RoonGiftModel) v.getTag();
EventBus.getDefault().post(new RoomGiftClickToEvent(this, giftModel, 1));
});
/*
* 在给View绑定显示的数据时计算正确的position = position + curIndex * pageSize
*/
// viewHolder.tv_gift_num.setVisibility(type.equals("1") ? View.VISIBLE : View.INVISIBLE);
// viewHolder.tv_gift_change_love_values.setVisibility(View.GONE);
//设置礼物名字
viewHolder.tv_gift_name.setText(giftModel.getGift_name());
//设置礼物价格
String surplusTxt = giftModel.getGift_price();
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(surplusTxt);
//ForegroundColorSpan 为文字前景色BackgroundColorSpan为文字背景色
ForegroundColorSpan redSpan = new ForegroundColorSpan(mContext.getResources().getColor(R.color.color_FFA9A9A9));
stringBuilder.setSpan(redSpan, surplusTxt.length(), surplusTxt.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//修改最后两个字体的颜色
viewHolder.tv_gift_price.setText(stringBuilder);
// viewHolder.item_layout.setTag(R.id.id_gift_tag, giftModel);
//加载礼物图片
ImageUtils.loadImageView(giftModel.getBase_image(), viewHolder.iv_gift_pic);
//设置选中后的样式
if (giftModel.isChecked()) {//被选中
viewHolder.cl_iv_down_on.setBackgroundResource(R.mipmap.room_gift_bjx);
viewHolder.ivDownOn.setVisibility(View.GONE);
} else {
viewHolder.ivDownOn.setVisibility(View.GONE);
viewHolder.cl_iv_down_on.setBackgroundResource(0);
}
//设置
// //设置礼物心动值
// if (giftModel.getCardiac().equals("0")) {
// viewHolder.tv_gift_change_love_values.setBackgroundResource(R.mipmap.room_gift_xin_dong_reduce);
// viewHolder.tv_gift_change_love_values.setText(String.format("%s", giftModel.getCardiac()));
// } else {
// viewHolder.tv_gift_change_love_values.setBackgroundResource(R.mipmap.room_gift_xin_dong_add);
// viewHolder.tv_gift_change_love_values.setText(String.format("+%s", giftModel.getCardiac()));
// }
// if (giftModel.isManghe()) {
// viewHolder.tv_gift_change_love_values.setVisibility(View.GONE);
// }
return convertView;
}
static class ViewHolder {
public ConstraintLayout item_layout;
public TextView tv_gift_name, tv_gift_price, tv_gift_num;
public ImageView iv_gift_pic;
public TextView tv_gift_change_love_values;
public ImageView ivDownOn;
public ConstraintLayout cl_iv_down_on;
}
}

View File

@@ -0,0 +1,189 @@
package com.xscm.moduleutil.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.event.RoomGiftClickEvent;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.ImageUtils;
import org.greenrobot.eventbus.EventBus;
import java.lang.ref.WeakReference;
import java.util.List;
public class GiftTwoAdapter extends BaseAdapter {
private final List<RoonGiftModel> mDatas;
private final LayoutInflater inflater;
private final Context mContext;
private final MyGestureDetector gestureDetector;
private final String type;
/**
* 页数下标,从0开始(当前是第几页)
*/
private final int curIndex;
/**
* 每一页显示的个数
*/
private final int pageSize = 100;
public GiftTwoAdapter(Context context, List<RoonGiftModel> mDatas, int curIndex, String type) {
inflater = LayoutInflater.from(context);
this.mDatas = mDatas;
this.curIndex = curIndex;
this.mContext = context;
this.type = type;
this.gestureDetector = new MyGestureDetector(mContext);
}
/**
* 先判断数据集的大小是否足够显示满本页mDatas.size() > (curIndex+1)*pageSize,
* 如果够则直接返回每一页显示的最大条目个数pageSize,
* 如果不够,则有几项返回几,(mDatas.size() - curIndex * pageSize);(也就是最后一页的时候就显示剩余item)
*/
@Override
public int getCount() {
return mDatas.size() > (curIndex + 1) * pageSize ? pageSize : (mDatas.size() - curIndex * pageSize);
}
@Override
public RoonGiftModel getItem(int position) {
return mDatas.get(position + curIndex * pageSize);
}
@Override
public long getItemId(int position) {
return position + (long) curIndex * pageSize;
}
private static class MyGestureDetector extends GestureDetector {
private static WeakReference<GiftTwoAdapter> sAdapter = new WeakReference<>(null);
private static RoonGiftModel sGiftModel;
public void setGiftModel(GiftTwoAdapter adapter, RoonGiftModel gift) {
sAdapter = new WeakReference<>(adapter);
sGiftModel = gift;
}
private static final SimpleOnGestureListener sSimpleOnGestureListener = new SimpleOnGestureListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
EventBus.getDefault().post(new RoomGiftClickEvent(sAdapter.get(), sGiftModel, 1));
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
EventBus.getDefault().post(new RoomGiftClickEvent(sAdapter.get(), sGiftModel, 2));
return true;
}
};
public MyGestureDetector(Context context) {
super(context, sSimpleOnGestureListener);
setOnDoubleTapListener(sSimpleOnGestureListener);
}
}
@Override
@SuppressLint({"SetTextI18n", "ClickableViewAccessibility"})
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.room_gv_gift_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.tv_gift_name = (TextView) convertView.findViewById(R.id.tv_gift_name);
viewHolder.tv_gift_price = (TextView) convertView.findViewById(R.id.tv_gift_price);
viewHolder.iv_gift_pic = (ImageView) convertView.findViewById(R.id.iv_gift_pic);
viewHolder.item_layout = (ConstraintLayout) convertView.findViewById(R.id.cl_gift);
viewHolder.ivDownOn = (ImageView) convertView.findViewById(R.id.iv_down_on);
viewHolder.cl_iv_down_on = (ConstraintLayout) convertView.findViewById(R.id.cl_iv_down_on);
viewHolder.tv_gift_num = convertView.findViewById(R.id.tv_number);
// viewHolder.tv_gift_change_love_values = convertView.findViewById(R.id.tv_gift_change_love_values);
viewHolder.item_layout.setOnTouchListener((v, event) -> {
gestureDetector.setGiftModel(GiftTwoAdapter.this, (RoonGiftModel) v.getTag(R.id.id_gift_tag));
gestureDetector.onTouchEvent(event);
return true;
});
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
/*
* 在给View绑定显示的数据时计算正确的position = position + curIndex * pageSize
*/
// viewHolder.tv_gift_num.setVisibility(type.equals("1") ? View.VISIBLE : View.INVISIBLE);
// viewHolder.tv_gift_change_love_values.setVisibility(View.GONE);
float[] corners = {0f, 4f, 0f, 4f};
ThemeableDrawableUtils.setThemeableRoundedBackground( viewHolder.tv_gift_num, ColorManager.getInstance().getPrimaryColorInt(), corners);
viewHolder.tv_gift_num.setTextColor(ColorManager.getInstance().getButtonColorInt());
RoonGiftModel giftModel = getItem(position);
//设置礼物名字
viewHolder.tv_gift_name.setText(giftModel.getGift_name());
//设置礼物价格
String surplusTxt = giftModel.getGift_price();
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(surplusTxt);
//ForegroundColorSpan 为文字前景色BackgroundColorSpan为文字背景色
ForegroundColorSpan redSpan = new ForegroundColorSpan(mContext.getResources().getColor(R.color.color_FFA9A9A9));
stringBuilder.setSpan(redSpan, surplusTxt.length(), surplusTxt.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//修改最后两个字体的颜色
viewHolder.tv_gift_price.setText(stringBuilder);
// viewHolder.item_layout.setTag(R.id.id_gift_tag, giftModel);
//加载礼物图片
ImageUtils.loadImageView(giftModel.getBase_image(), viewHolder.iv_gift_pic);
//设置选中后的样式
if (giftModel.isChecked()) {//被选中
viewHolder.cl_iv_down_on.setBackgroundResource(R.mipmap.room_gift_bjx);
viewHolder.ivDownOn.setVisibility(View.GONE);
} else {
viewHolder.ivDownOn.setVisibility(View.GONE);
viewHolder.cl_iv_down_on.setBackgroundResource(0);
}
viewHolder.tv_gift_num.setText(String.format("x%s", giftModel.getNum()));
//设置
// //设置礼物心动值
// if (giftModel.getCardiac().equals("0")) {
// viewHolder.tv_gift_change_love_values.setBackgroundResource(R.mipmap.room_gift_xin_dong_reduce);
// viewHolder.tv_gift_change_love_values.setText(String.format("%s", giftModel.getCardiac()));
// } else {
// viewHolder.tv_gift_change_love_values.setBackgroundResource(R.mipmap.room_gift_xin_dong_add);
// viewHolder.tv_gift_change_love_values.setText(String.format("+%s", giftModel.getCardiac()));
// }
// if (giftModel.isManghe()) {
// viewHolder.tv_gift_change_love_values.setVisibility(View.GONE);
// }
return convertView;
}
static class ViewHolder {
public ConstraintLayout item_layout;
public TextView tv_gift_name, tv_gift_price, tv_gift_num;
public ImageView iv_gift_pic;
public TextView tv_gift_change_love_values;
public ImageView ivDownOn;
public ConstraintLayout cl_iv_down_on;
}
}

View File

@@ -0,0 +1,346 @@
package com.xscm.moduleutil.adapter;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.base.BaseMvpFragment;
import com.xscm.moduleutil.bean.GiftLabelBean;
import com.xscm.moduleutil.bean.GiftPackBean;
import com.xscm.moduleutil.bean.RewardUserBean;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.bean.WalletBean;
import com.xscm.moduleutil.bean.room.RoomAuction;
import com.xscm.moduleutil.databinding.RoomVpGiftBinding;
import com.xscm.moduleutil.event.GiftDoubleClickEvent;
import com.xscm.moduleutil.event.GiftUserRefreshEvent;
import com.xscm.moduleutil.event.RoomGiftClickEvent;
import com.xscm.moduleutil.event.RoomGiftClickToEvent;
import com.xscm.moduleutil.event.RoomGiftPackToEvent;
import com.xscm.moduleutil.presenter.RewardGiftContacts;
import com.xscm.moduleutil.presenter.RewardGiftPresenter;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
public class GiftTwoDetailsFragment extends BaseMvpFragment<RewardGiftPresenter, RoomVpGiftBinding> implements RewardGiftContacts.View {
private String id;
private GiftTwoAdapter mAdapter;
private GiftRoomAdapter roomAdapter;
private GiftPackAdapter packAdapter;
private String tag;
private int pageSize = 100;//一页显示的礼物个数
private int pageCount;//页数
private int type;//1:房间点击进入的2打赏进入的
private List<RoonGiftModel> giftList=new ArrayList<>();
private List<GiftPackBean> giftPackList=new ArrayList<>();
public static GiftTwoDetailsFragment newInstance(String id,int type) {
Bundle args = new Bundle();
args.putString("id", id);
args.putInt("type", type);
GiftTwoDetailsFragment fragment = new GiftTwoDetailsFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
id = arguments.getString("id");
type = arguments.getInt("type");
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
protected RewardGiftPresenter bindPresenter() {
return new RewardGiftPresenter(this, getActivity());
}
@Override
protected void initData() {
if (id.equals("0")){
MvpPre.giftPack();
}else {
if (type==0) {
MvpPre.getGiftList("0", type);
}else {
MvpPre.getGiftList(id, type);
}
}
}
@Override
protected void initView() {
}
@Override
protected int getLayoutId() {
return R.layout.room_vp_gift;
}
public RoonGiftModel getGiftList() {
if (giftList != null) {
for (RoonGiftModel item : giftList) {
if (item.isChecked()) {
return item;
}
}
}
return null;
}
public GiftPackBean mGiftList() {
if (giftPackList != null) {
for (GiftPackBean item : giftPackList) {
if (item.isChecked()) {
return item;
}
}
}
return null;
}
@Override
public void setGiftList(List<RoonGiftModel> data,int type) {
if (type == 1){
giftList=new ArrayList<>();
giftList.addAll(data);
pageCount = (int) Math.ceil(data.size() * 1.0 / pageSize);
for (int j = 0; j < pageCount; j++) {
roomAdapter = new GiftRoomAdapter(getActivity(), data, j, "0");
mBinding.rvGift.setAdapter(roomAdapter);
}
}else {
giftList=new ArrayList<>();
giftList.addAll(data);
pageCount = (int) Math.ceil(data.size() * 1.0 / pageSize);
for (int j = 0; j < pageCount; j++) {
// mAdapter = new GiftTwoAdapter(getActivity(), data, j, "0");
// mBinding.rvGift.setAdapter(mAdapter);
roomAdapter = new GiftRoomAdapter(getActivity(), data, j, "0");
mBinding.rvGift.setAdapter(roomAdapter);
}
}
// EventBus.getDefault().post(new RoomGiftEvent(data));
}
@Override
public void giveGift() {
}
@Override
public void wallet(WalletBean walletBean) {
}
@Override
public void reward_zone() {
ToastUtils.showShort("打赏成功");
}
@Override
public void roomAuctionJoin(RoomAuction.AuctionListBean auctionListBean) {
}
@Override
public void giftPack(List<GiftPackBean> giftPackBean) {
giftPackList=new ArrayList<>();
giftPackList.addAll(giftPackBean);
pageCount = (int) Math.ceil(giftPackBean.size() * 1.0 / pageSize);
for (int j = 0; j < pageCount; j++) {
// mAdapter = new GiftTwoAdapter(getActivity(), data, j, "0");
// mBinding.rvGift.setAdapter(mAdapter);
packAdapter = new GiftPackAdapter(getActivity(), giftPackBean, j, "0");
mBinding.rvGift.setAdapter(packAdapter);
}
}
@Override
public void getRewardList(List<RewardUserBean> rewardUserBeanList) {
}
@Override
public void getGiftLabel(List<GiftLabelBean> giftLabelBeans) {
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftClicRoomkEvent(RoomGiftClickEvent event) {
if (giftList == null){
giftList = new ArrayList<>();
giftList.add(event.gift);
}
if (event.type == 1) {
String id = event.gift.getGift_id();
for (int i = 0; i < giftList.size(); i++) {
RoonGiftModel giftModel = giftList.get(i);
if (giftModel.getGift_id().equals(id)) {
if (!giftModel.isChecked()) {
EventBus.getDefault().post(new GiftUserRefreshEvent(giftModel.isCan_send_self(), event.type,event.gift));
giftModel.setChecked(true);
}
} else {
giftModel.setChecked(false);
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
} else if (event.type == 2) {
String id = event.gift.getGift_id();
RoonGiftModel selGift = null;
for (int i = 0; i < giftList.size(); i++) {
RoonGiftModel giftModel = giftList.get(i);
if (giftModel.getGift_id().equals(id)) {
selGift = giftModel;
if (!giftModel.isChecked()) {
EventBus.getDefault().post(new GiftUserRefreshEvent(giftModel.isCan_send_self(), event.type,event.gift));
giftModel.setChecked(true);
}
} else {
giftModel.setChecked(false);
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
if (selGift != null) {
EventBus.getDefault().post(new GiftDoubleClickEvent());
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftClicPackEvent(RoomGiftPackToEvent event) {
if (giftPackList == null) {
giftPackList = new ArrayList<>();
giftPackList.add(event.gift);
}
if (event.type == 1){
String id = event.gift.getGift_id();
for (int i = 0; i < giftPackList.size(); i++) {
GiftPackBean giftModel = giftPackList.get(i);
RoonGiftModel roonGiftModel = new RoonGiftModel();
roonGiftModel.setGift_id(giftModel.getGift_id());
roonGiftModel.setGift_name(giftModel.getGift_name());
roonGiftModel.setGift_price(giftModel.getGift_price());
roonGiftModel.setBase_image(giftModel.getBase_image());
roonGiftModel.setNum(Integer.parseInt(giftModel.getNum()));
if (giftModel.getGift_id().equals(id)) {
if (!giftModel.isChecked()) {
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type,roonGiftModel));
giftModel.setChecked(true);
}
} else {
giftModel.setChecked(false);
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
}else {
String id = event.gift.getGift_id();
GiftPackBean selGift = null;
for (int i = 0; i < giftPackList.size(); i++) {
GiftPackBean giftModel = giftPackList.get(i);
RoonGiftModel roonGiftModel = new RoonGiftModel();
roonGiftModel.setGift_id(giftModel.getGift_id());
roonGiftModel.setGift_name(giftModel.getGift_name());
roonGiftModel.setGift_price(giftModel.getGift_price());
roonGiftModel.setBase_image(giftModel.getBase_image());
roonGiftModel.setNum(Integer.parseInt(giftModel.getNum()));
if (giftModel.getGift_id().equals(id)) {
selGift = giftModel;
if (!giftModel.isChecked()) {
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type,roonGiftModel));
giftModel.setChecked(true);
}
} else {
giftModel.setChecked(false);
EventBus.getDefault().post(new GiftUserRefreshEvent(false, event.type,null));
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
if (selGift != null) {
EventBus.getDefault().post(new GiftDoubleClickEvent());
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftClicRoomkTEvent(RoomGiftClickToEvent event) {
if (giftList == null){
giftList = new ArrayList<>();
giftList.add(event.gift);
}
if (event.type == 1) {
String id = event.gift.getGift_id();
for (int i = 0; i < giftList.size(); i++) {
RoonGiftModel giftModel = giftList.get(i);
if (giftModel.getGift_id().equals(id)) {
if (giftModel.isChecked()) {
giftModel.setChecked(false);
EventBus.getDefault().post(new GiftUserRefreshEvent(false, event.type,null));
}else {
giftModel.setChecked(true);
EventBus.getDefault().post(new GiftUserRefreshEvent(true, event.type,event.gift));
}
} else {
giftModel.setChecked(false);
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
} else if (event.type == 2) {
String id = event.gift.getGift_id();
RoonGiftModel selGift = null;
for (int i = 0; i < giftList.size(); i++) {
RoonGiftModel giftModel = giftList.get(i);
if (giftModel.getGift_id().equals(id)) {
selGift = giftModel;
if (giftModel.isChecked()) {
giftModel.setChecked(false);
EventBus.getDefault().post(new GiftUserRefreshEvent(false, event.type,null));
}else {
giftModel.setChecked(true);
EventBus.getDefault().post(new GiftUserRefreshEvent(giftModel.isCan_send_self(), event.type,event.gift));
}
} else {
giftModel.setChecked(false);
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
if (selGift != null) {
EventBus.getDefault().post(new GiftDoubleClickEvent());
}
}
}
}

View File

@@ -0,0 +1,41 @@
package com.xscm.moduleutil.adapter;
import android.view.View;
import android.widget.GridView;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.BaseListData;
import com.xscm.moduleutil.bean.HeavenGiftBean;
import com.zhpan.bannerview.BaseBannerAdapter;
import com.zhpan.bannerview.BaseViewHolder;
import java.util.List;
public class HeavenGiftAdapter extends BaseBannerAdapter<BaseListData> {
List<HeavenGiftBean> list;
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.onItemClickListener = listener;
}
@Override
protected void bindData(BaseViewHolder<BaseListData> holder, BaseListData data, int position, int pageSize) {
GiftTwoAdapter adapter = new GiftTwoAdapter(holder.itemView.getContext(), data.getData(), 0,"4");
GridView recyclerView = holder.itemView.findViewById(R.id.rv_gift);
// recyclerView.setLayoutManager(new GridLayoutManager(holder.itemView.getContext(), 4));
recyclerView.setAdapter(adapter);
// adapter.setNewData(data.getData());
}
@Override
public int getLayoutId(int viewType) {
return R.layout.ietm_heaven_gift;
}
public interface OnItemClickListener {
void onItemClick(View view, HeavenGiftBean data, int position);
}
}

View File

@@ -0,0 +1,28 @@
package com.xscm.moduleutil.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.CircleListBean;
import com.xscm.moduleutil.utils.ImageUtils;
/**
*@author qx
*@data 2025/6/10
*@description: 点赞适配
*/
public class LikeListAdapter extends BaseQuickAdapter<CircleListBean.LikeList, BaseViewHolder> {
public LikeListAdapter() {
super(R.layout.item_like_list);
}
@Override
protected void convert(BaseViewHolder helper, CircleListBean.LikeList item) {
ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.like_avatar));
helper.setText(R.id.tv_nickname, item.getNickname());
String s=item.getSex().equals("1")?"":"";
String age=item.getAge()+"";
String constellation=item.getConstellation();
String co=s+"/"+age+"/"+constellation;
helper.setText(R.id.tv_content, co);
}
}

View File

@@ -0,0 +1,28 @@
package com.xscm.moduleutil.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.CircleListBean;
import com.xscm.moduleutil.bean.room.RoomOnlineBean;
import com.xscm.moduleutil.utils.ImageUtils;
/**
*@author qx
*@data 2025/6/10
*@description: 显示用户小头像
*/
public class LikeUserAdapter<T> extends BaseQuickAdapter<T, BaseViewHolder> {
public LikeUserAdapter() {
super(R.layout.item_like_user);
}
@Override
protected void convert(BaseViewHolder helper,T item) {
if (item instanceof CircleListBean.LikeList) {
ImageUtils.loadHeadCC(((CircleListBean.LikeList) item).getAvatar(), helper.getView(R.id.user_icon));
} else {
// 可扩展:通过接口回调获取头像 URL
ImageUtils.loadHeadCC(((RoomOnlineBean) item).getAvatar(), helper.getView(R.id.user_icon));
}
}
}

View File

@@ -0,0 +1,43 @@
package com.xscm.moduleutil.adapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* listview的adapter基类
*/
public class MyBaseAdapter<T> extends BaseAdapter {
public List<T> list_adapter;
@Override
public int getCount() {
return list_adapter == null ? 0 : list_adapter.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return list_adapter.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
public List<T> getList_adapter() {
if (list_adapter == null)
list_adapter = new ArrayList<>();
return list_adapter;
}
}

View File

@@ -0,0 +1,35 @@
package com.xscm.moduleutil.adapter;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.List;
public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(List<Fragment> list, FragmentManager fm) {
super(fm);
this.fragmentList = list;
}
@Override
public Fragment getItem(int i) {
return fragmentList.get(i);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
// super.destroyItem(container, position, object);
}
}

View File

@@ -0,0 +1,42 @@
package com.xscm.moduleutil.adapter;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.List;
public class MyPagerAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragments;
private List<String> typeOnes;
public MyPagerAdapter(FragmentManager fm, List<Fragment> mFragments, List<String> ones) {
super(fm);
this.fragments = mFragments;
this.typeOnes = ones;
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return typeOnes.get(position);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
}

View File

@@ -0,0 +1,90 @@
package com.xscm.moduleutil.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.makeramen.roundedimageview.RoundedImageView;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.utils.ImageUtils;
public class OneImageYuanJiaoAdapter extends MyBaseAdapter<String> {
private Context context;
// public OneImageYuanJiaoAdapter(Context context) {
// this.context = context;
// }
public OneImageYuanJiaoAdapter(Context context) {
this.context = context;
}
// @Override
// protected void convert(BaseViewHolder helper, String item) {
// helper.addOnClickListener(R.id.fiv);
//
// helper.setVisible(R.id.ll_del, false);
// QMUIRadiusImageView image = helper.getView(R.id.fiv);
// RequestOptions options = new RequestOptions()
// .centerCrop()
// .placeholder(R.color.white)
// .diskCacheStrategy(DiskCacheStrategy.ALL);
// Glide.with(mContext)
// .load(item)
// .apply(options)
// .into(image);
// }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder VH;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.gv_filter_image, null);
VH = new ViewHolder(convertView);
convertView.setTag(VH);
} else {
VH = (ViewHolder) convertView.getTag();
}
VH.iv_del.setVisibility(View.GONE);
if (!TextUtils.isEmpty(list_adapter.get(position))) {
ImageUtils.loadHeadCC(list_adapter.get(position),VH.tv_title);
}
//
return convertView;
}
public static class ViewHolder {
RoundedImageView tv_title;
ImageView iv_del;
RelativeLayout layoutImg;
public ViewHolder(View convertView) {
tv_title = convertView.findViewById(R.id.fiv);
iv_del = convertView.findViewById(R.id.iv_del);
// layoutImg = convertView.findViewById(R.id.layout_img);
//
// int screenWidth = QMUIDisplayHelper.getScreenWidth(BaseApplication.mApplication) - QMUIDisplayHelper.dp2px(BaseApplication.mApplication, 24);
//
// int imgWidth = screenWidth*1/3-QMUIDisplayHelper.dp2px(BaseApplication.mApplication, 10);
//
// RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) layoutImg.getLayoutParams();
// params.width = imgWidth;
// params.height = imgWidth;
// layoutImg.setLayoutParams(params);
//
// params = (RelativeLayout.LayoutParams) tv_title.getLayoutParams();
// params.width = imgWidth;
// params.height = imgWidth;
// tv_title.setLayoutParams(params);
}
}
}

View File

@@ -0,0 +1,47 @@
package com.xscm.moduleutil.adapter;
import android.view.View;
import android.widget.ImageView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.BindType;
import com.xscm.moduleutil.utils.ImageUtils;
public class PayMethodAdapter extends BaseQuickAdapter<BindType.AllData, BaseViewHolder> {
private int selectedPosition = -1; // -1 表示未选中
public PayMethodAdapter(int layoutResId) {
super(layoutResId);
}
public void setSelectedPosition(int position) {
selectedPosition = position;
notifyDataSetChanged();
}
public int getSelectedPosition() {
return selectedPosition;
}
@Override
protected void convert(BaseViewHolder helper, BindType.AllData item) {
helper.setText(R.id.tv_name, item.getName());
ImageUtils.loadHeadCC(item.getIcon(), helper.getView(R.id.im_zfb));
// 设置选中状态样式
boolean isSelected = helper.getAdapterPosition() == selectedPosition;
View itemView = helper.itemView;
itemView.setSelected(isSelected);
ImageView imageView= helper.getView(R.id.iv_three_pay);
// 你可以在这里修改背景、边框、图标等来表示选中状态
if (isSelected) {
imageView.setImageLevel(1);
} else {
imageView.setImageLevel(0);
}
}
}

View File

@@ -0,0 +1,125 @@
package com.xscm.moduleutil.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.TimeUtils;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.CommentBean;
import java.util.List;
public class ReplyAdapter extends RecyclerView.Adapter<ReplyAdapter.ReplyViewHolder> {
public interface OnReplyClickListener {
void onReplyClick(CommentBean.CommentDetailsBean.Replies reply, int position);
}
// 添加回调接口
public interface OnReplyLongClickListener {
void onReplyLongClick(CommentBean.CommentDetailsBean.Replies reply, int position);
}
private OnReplyLongClickListener longClickListener;
public void setOnReplyLongClickListener(OnReplyLongClickListener listener) {
this.longClickListener = listener;
}
private OnReplyClickListener listener;
// 设置监听器的方法
public void setOnReplyClickListener(OnReplyClickListener listener) {
this.listener = listener;
}
private List<CommentBean.CommentDetailsBean.Replies> replyList;
private boolean isExpanded = false; // 是否展开显示所有评论
public ReplyAdapter(List<CommentBean.CommentDetailsBean.Replies> replyList) {
this.replyList = replyList;
}
public void updateData(List<CommentBean.CommentDetailsBean.Replies> newReplyList) {
replyList.clear();
replyList.addAll(newReplyList);
notifyDataSetChanged();
}
@NonNull
@Override
public ReplyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_reply, parent, false);
return new ReplyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ReplyViewHolder holder, int position) {
CommentBean.CommentDetailsBean.Replies reply = replyList.get(position);
if (!isExpanded && position >= 2) {
return; // 不绑定数据
}
holder.bind(reply,position, listener,longClickListener);
}
public void setExpanded(boolean expanded) {
isExpanded = expanded;
notifyDataSetChanged(); // 刷新适配器
}
@Override
public int getItemCount() {
return isExpanded ? replyList.size() : Math.min(2, replyList.size());
}
class ReplyViewHolder extends RecyclerView.ViewHolder {
private TextView tvNickname;
private TextView tvContent;
private TextView btnReply;
private TextView tvTime;
private TextView btnShowAllReplies;
public ReplyViewHolder(@NonNull View itemView) {
super(itemView);
tvNickname = itemView.findViewById(R.id.tv_name);
tvContent = itemView.findViewById(R.id.tv_reply);
btnReply = itemView.findViewById(R.id.btn_reply);
tvTime = itemView.findViewById(R.id.tv_time);
// btnShowAllReplies = itemView.findViewById(R.id.btn_show_all_replies);
}
public void bind(CommentBean.CommentDetailsBean.Replies reply,int position, OnReplyClickListener listener,OnReplyLongClickListener longClickListener) {
tvNickname.setText(reply.getNickname()+":" +(reply.getReply_to_user()!=null?reply.getReply_to_user():""));
tvContent.setText(reply.getContent());
tvTime.setText(TimeUtils.millis2String(Long.parseLong(reply.getCreatetime()+"") * 1000));
btnReply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
listener.onReplyClick(reply, position);
}
}
});
// 添加长按监听
itemView.setOnLongClickListener(v -> {
if (longClickListener != null) {
longClickListener.onReplyLongClick(reply, position);
return true; // 消费事件
}
return false;
});
// 控制“全部评论...”按钮的显示
// btnShowAllReplies.setVisibility(position > 2 ? VISIBLE : GONE);
//
// btnShowAllReplies.setOnClickListener(v -> {
//// replyAdapter.setExpanded(true); // 展开所有评论
// notifyDataSetChanged(); // 刷新适配器
// btnShowAllReplies.setVisibility(GONE); // 隐藏按钮
// });
}
}
}

View File

@@ -0,0 +1,4 @@
package com.xscm.moduleutil.adapter;
public class RewardUserAdapter {
}

View File

@@ -0,0 +1,63 @@
package com.xscm.moduleutil.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.utils.ImageUtils;
public class UserPhotoWallAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
private boolean b = false;
public static final String ADD_PHOTO = "ADD_PHOTO";
private int longClickPos = -1;
public UserPhotoWallAdapter() {
super(R.layout.me_item_user_photo_wall);
}
@Override
protected void convert(BaseViewHolder helper, String item) {
helper.setGone(R.id.iv_close, false);
if (item.equals(ADD_PHOTO)) {
// 显示加号图片
helper.setImageResource(R.id.riv_user_head, com.xscm.moduleutil.R.mipmap.add_img);
} else {
ImageUtils.loadCenterCrop(item, helper.getView(R.id.riv_user_head));
}
// if (helper.getAdapterPosition() == 5) {
// helper.setVisible(R.id.riv_user_head, false);
// helper.setVisible(R.id.iv_close, false);
// } else {
// helper.setVisible(R.id.riv_user_head, true);
// if (!"0".equals(item.getId())) {
// ImageUtils.loadCenterCrop(item.getUrl(), helper.getView(R.id.riv_user_head));
// if (longClickPos == helper.getAdapterPosition()) {
// helper.setVisible(R.id.iv_close, true);
// } else {
// helper.setVisible(R.id.iv_close, false);
// }
// } else {
// helper.setImageResource(R.id.riv_user_head, com.qxcm.moduleutil.R.mipmap.add_img);
// helper.setGone(R.id.iv_close, false);
// }
// }
helper.addOnClickListener(R.id.iv_close);
helper.addOnClickListener(R.id.riv_user_head);
helper.addOnLongClickListener(R.id.riv_user_head);
}
public void setDelete(boolean b) {
this.b = b;
notifyDataSetChanged();
}
public void setLongClickPos(int pos) {
this.longClickPos = pos;
notifyDataSetChanged();
}
public boolean getDelete() {
return b;
}
}

View File

@@ -0,0 +1,82 @@
package com.xscm.moduleutil.base;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.Fragment;
import com.xscm.moduleutil.activity.BaseAppCompatActivity;
import org.greenrobot.eventbus.EventBus;
public abstract class BaseFragment<VDB extends ViewDataBinding> extends Fragment {
protected VDB mBinding;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false);
mBinding.setLifecycleOwner(this);
return mBinding.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (getArguments() != null) {
initArgs(getArguments());
}
initView();
initData();
initListener();
}
public void initArgs(Bundle arguments) {
}
@Override
public void onDestroyView() {
if (mBinding != null) {
mBinding.unbind();
}
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
super.onDestroyView();
}
protected void initListener() {
}
protected abstract void initData();
protected abstract void initView();
protected abstract int getLayoutId();
public void showLoading(String content) {
if (!isAdded() || getActivity() == null) {
return;
}
if (getActivity() instanceof BaseAppCompatActivity) {
((BaseAppCompatActivity) getActivity()).showLoading(content);
}
}
public void disLoading() {
if (getActivity() instanceof BaseAppCompatActivity) {
((BaseAppCompatActivity) getActivity()).disLoading();
}
}
}

View File

@@ -0,0 +1,139 @@
package com.xscm.moduleutil.base;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.DialogFragment;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.activity.BaseAppCompatActivity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
/**
*@author qx
*@data 2025/5/29
*@description: dialogFragement基类
*/
public abstract class BaseMvpDialogFragment<P extends IPresenter, VDM extends ViewDataBinding> extends DialogFragment implements IView<Activity> {
protected VDM mBinding;
protected P MvpPre;
protected abstract P bindPresenter();
protected boolean setDialogWH = true;
protected boolean isAnimation = true;
protected boolean mGravityBOTTOM;
@Override
public Activity getSelfActivity() {
return getActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// ARouter.getInstance().inject(this);
mBinding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false);
mBinding.setLifecycleOwner(this);
return mBinding.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
MvpPre = bindPresenter();
if (getArguments() != null) {
initArgs(getArguments());
}
initView();
initData();
}
public void initArgs(Bundle arguments) {
}
protected abstract void initData();
protected abstract void initView();
protected abstract int getLayoutId();
@Override
public void onStart() {
super.onStart();
if (getDialog() != null && setDialogWH) {
Window window = getDialog().getWindow();
if (mGravityBOTTOM) {
window.setGravity(Gravity.BOTTOM);
}
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
if (isAnimation) {
window.setWindowAnimations(R.style.CommonShowDialogBottom);
}
// window.getDecorView().setPadding(0, 0, 0, 0);
initDialogStyle(window);
}
}
protected void initDialogStyle(Window window) {
}
@Override
public void showLoadings() {
if (!isAdded() || getActivity() == null) {
return;
}
if (getActivity() instanceof BaseAppCompatActivity) {
((BaseAppCompatActivity) getActivity()).showLoading("加载中...");
}
}
@Override
public void showLoadings(String content) {
if (!isAdded() || getActivity() == null) {
return;
}
if (getActivity() instanceof BaseAppCompatActivity) {
((BaseAppCompatActivity) getActivity()).showLoading(content);
}
}
@Override
public void disLoadings() {
if (getActivity() instanceof BaseAppCompatActivity) {
((BaseAppCompatActivity) getActivity()).disLoading();
}
}
@Override
public void onDestroyView() {
if (mBinding != null) {
mBinding.unbind();
}
if (MvpPre != null) {
MvpPre.detachView();
}
super.onDestroyView();
}
}

View File

@@ -0,0 +1,63 @@
package com.xscm.moduleutil.base;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.FragmentActivity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
public abstract class BaseMvpFragment<P extends IPresenter, VDB extends ViewDataBinding> extends BaseFragment<VDB> implements IView<Activity> {
protected P MvpPre;
protected abstract P bindPresenter();
@Override
public FragmentActivity getSelfActivity() {
return getActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
MvpPre = bindPresenter();
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onDestroyView() {
if (MvpPre != null) {
MvpPre.detachView();
}
super.onDestroyView();
}
@Override
public void showLoadings() {
// showLoading("加载中...");
}
@Override
public void showLoadings(String content) {
// showLoading(content);
}
@Override
public void disLoadings() {
// disLoading();
}
}

View File

@@ -0,0 +1,27 @@
package com.xscm.moduleutil.base;
import android.app.Activity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
public final class BaseRoomContacts {
public interface View extends IView<Activity> {
}
public interface IBaseRoomPre extends IPresenter {
void downWheat(String roomId);
void applyWheat(String roomId, String pitNumber);
void applyWheatWait(String roomId, String pitNumber);
void getRoomInfo(String roomId, String password);
void putOnWheat(String roomId, String userId,String pitNum);
}
}

View File

@@ -0,0 +1,171 @@
package com.xscm.moduleutil.base;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.ViewDataBinding;
import com.xscm.moduleutil.bean.room.RoomInfoResp;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseRoomFragment<P extends BaseRoomPresenter, VDB extends ViewDataBinding> extends BaseMvpFragment<P, VDB> implements BaseRoomContacts.View {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
public void onDestroyView() {
unRegisterWheatViews();
EventBus.getDefault().unregister(this);
super.onDestroyView();
}
@Override
protected void initView() {
registerWheatViews();
}
/**
* 房间信息
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfo(RoomInfoResp resp) {
roomInfoUpdate(resp);
// EventBus.getDefault().post(new RoomCardiacValueChangedEvent());
}
public abstract void roomInfoUpdate(RoomInfoResp resp);
public abstract void registerWheatViews();
public abstract void unRegisterWheatViews();
public abstract int[] collectCurrentCardiacValues();
public int[][] collectAmativenessCurrentCardiacValues() { return new int[2][0]; }
public abstract void hideAllWheatMaozi();
public void showWheatMaoziHuangguan(int wheat) {}
public void showWheatMaoziBianbian(int... wheats) {}
public void showAmativenessMaleWheatMaozi(int index, int level) {}
public void showAmativenessFemaleWheatMaozi(int index, int level) {}
protected void tzblChanged() {
}
// @Subscribe(threadMode = ThreadMode.MAIN)
// public void onRoomTzblChangedEvent(RoomTzblChangedEvent event) {
// tzblChanged();
// }
// @Subscribe(threadMode = ThreadMode.MAIN)
// public void onRoomCardiacValueChangedEvent(RoomCardiacValueChangedEvent event) {
//// hideAllWheatMaozi();
// checkWheatMaoziState(collectCurrentCardiacValues());
// int[][] cvs = collectAmativenessCurrentCardiacValues();
// checkAmativenessMaleWheatMaoziState(cvs[0]);
// checkAmativenessFemaleWheatMaoziState(cvs[1]);
// }
private void checkWheatMaoziState(int[] cvs) {
int max = -999999999;
int min = 999999999;
List<Integer> maxs = new ArrayList<>();
List<Integer> mins = new ArrayList<>();
// 找出最大值/最小值
for (int i = 0; i < cvs.length; i++) {
int v = cvs[i];
if (v < 0) continue; // 小于0的麦位表示麦位没人
if (v >= max) { max = v; }
if (v <= min) { min = v; }
}
// 如果最大值和最小值相同,全部不带帽子
if (min == max) return;
// 找出最大值的麦位/最小值的麦位
for (int i = 0; i < cvs.length; i++) {
int v = cvs[i];
if (v < 0) continue; // 小于0的麦位表示麦位没人
if (v == max) { maxs.add(i); }
if (v == min) { mins.add(i); }
}
// 排序最大值的麦位,选出最优先的一个,带皇冠
if (maxs.size() > 0) {
// showWheatMaoziHuangguan(maxs.get(0));
}
// 给所有最小值的麦位,带便便
if (mins.size() > 0) {
int[] ws = new int[mins.size()];
for (int i = 0; i < ws.length; i++) { ws[i] = mins.get(i); }
// showWheatMaoziBianbian(ws);
}
}
private void checkAmativenessMaleWheatMaoziState(int[] cvs) {
int max = -999999999;
List<Integer> maxs = new ArrayList<>();
// 找出最大值
for (int v : cvs) {
if (v < 0) continue; // 小于0的麦位表示麦位没人
if (v >= max) {
max = v;
}
}
// 找出最大值的麦位
for (int i = 0; i < cvs.length; i++) {
int v = cvs[i];
if (v < 0) continue; // 小于0的麦位表示麦位没人
if (v == max) { maxs.add(i); }
}
// 获得男生第一帽子等级
if (maxs.size() > 0) {
int level = getAmativenessWheatMaoziLevel(max);
if (level > 0) showAmativenessMaleWheatMaozi(maxs.get(0), level);
}
}
private void checkAmativenessFemaleWheatMaoziState(int[] cvs) {
int max = -999999999;
List<Integer> maxs = new ArrayList<>();
// 找出最大值
for (int v : cvs) {
if (v < 0) continue; // 小于0的麦位表示麦位没人
if (v >= max) {
max = v;
}
}
// 找出最大值的麦位
for (int i = 0; i < cvs.length; i++) {
int v = cvs[i];
if (v < 0) continue; // 小于0的麦位表示麦位没人
if (v == max) { maxs.add(i); }
}
// 获得女生第一帽子等级
if (maxs.size() > 0) {
int level = getAmativenessWheatMaoziLevel(max);
if (level > 0) showAmativenessFemaleWheatMaozi(maxs.get(0), level);
}
}
private int getAmativenessWheatMaoziLevel(int value) {
if (value >= 52000) {
return 3;
} else if (value >= 10000) {
return 2;
} else if (value >= 1000) {
return 1;
} else {
return 0;
}
}
}

View File

@@ -0,0 +1,153 @@
package com.xscm.moduleutil.base;
import android.content.Context;
import com.xscm.moduleutil.activity.IView;
import com.xscm.moduleutil.presenter.BasePresenter;
public class BaseRoomPresenter<V extends IView> extends BasePresenter<V> implements BaseRoomContacts.IBaseRoomPre {
public BaseRoomPresenter(V view, Context context) {
super(view, context);
}
@Override
public void downWheat(String roomId) {
// ApiClient.getInstance().downWheat(roomId, new BaseObserver<String>() {
// @Override
// public void onSubscribe(Disposable d) {
// addDisposable(d);
// }
//
// @Override
// public void onNext(String s) {
//// getRoomInfo(roomId);
// EventBus.getDefault().post(new UserDownWheatEvent());
// RtcManager.getInstance().downWheat();
// }
//
// @Override
// public void onComplete() {
//
// }
// });
}
@Override
public void applyWheat(String roomId, String pitNumber) {
// ApiClient.getInstance().applyWheat(roomId, pitNumber, new BaseObserver<String>() {
// @Override
// public void onSubscribe(Disposable d) {
// addDisposable(d);
// }
//
// @Override
// public void onNext(String s) {
//// getRoomInfo(roomId);
// }
//
// @Override
// public void onComplete() {
//
// }
// });
}
@Override
public void applyWheatWait(String roomId, String pitNumber) {
// ApiClient.getInstance().applyWheatWait(roomId, pitNumber, new BaseObserver<ApplyWheatWaitResp>() {
// @Override
// public void onSubscribe(Disposable d) {
// addDisposable(d);
// }
//
// @Override
// public void onNext(ApplyWheatWaitResp applyWheatWaitResp) {
// if (applyWheatWaitResp != null && !applyWheatWaitResp.getState().equals("1")) {
// EventBus.getDefault().post(new ApplyWaitEvent(true, pitNumber));
//// ToastUtils.show("申请成功");
// }
// }
//
// @Override
// public void onComplete() {
//
// }
// });
}
@Override
public void getRoomInfo(String roomId, String password) {
// NewApi.getInstance().roomInfo(roomId, password, new com.qpyy.libcommon.api.BaseObserver<RoomInfoResp>() {
//// NewApi.getInstance().roomGetIn(roomId, password, new com.qpyy.libcommon.api.BaseObserver<RoomInfoResp>() {
// @Override
// public void onSubscribe(Disposable d) {
// addDisposable(d);
// }
//
// @Override
// public void onNext(RoomInfoResp roomInfoResp) {
// if (roomInfoResp.getRejoin() == 1) {
// UserBean userBean = BaseApplication.getInstance().getUser();
// Config config = null;
// if (!ObjectUtils.isEmpty(roomInfoResp.getRoom_info().getSound_effect())) {
// config = roomInfoResp.getRoom_info().getSound_effect().getConfig();
// }
// RtcManager.getInstance().destroyAndLogin(RtcConstants.RtcType_CURR, roomInfoResp.getRoom_info().getSceneId(), config, roomId, userBean.getUser_id(), userBean.getNickname(), "", new RtcDestroyCallback() {
// @Override
// public void onDestroySuccess() {
// if (roomInfoResp.isOnWheat()) {//在麦位上就恢复麦克风状态
// RtcManager.getInstance().applyWheat(String.format("%s_%s", roomId, SpUtils.getUserId()));
// } else {//否则停止推流
// RtcManager.getInstance().downWheat();
// }
// RtcManager.getInstance().resumeAudio();
// }
// });
// } else {
// if (roomInfoResp.isOnWheat()) {//在麦位上就恢复麦克风状态
// RtcManager.getInstance().resumeMic();
// } else {//否则停止推流
// RtcManager.getInstance().downWheat();
// }
// }
// EventBus.getDefault().post(roomInfoResp);
// }
//
// @Override
// public void onComplete() {
//
// }
//
// @Override
// public void onError(Throwable e) {
// super.onError(e);
// if (e instanceof APIException) {
// EventBus.getDefault().post(new RoomOutEvent());
// }
// }
// });
}
@Override
public void putOnWheat(String roomId, String userId,String pitNum) {
MvpRef.get().showLoadings();
// ApiClient.getInstance().putOnWheat(roomId, userId,pitNum, new BaseObserver<PutOnWheatResp>() {
// @Override
// public void onSubscribe(Disposable d) {
// addDisposable(d);
// }
//
// @Override
// public void onNext(PutOnWheatResp s) {
//
// }
//
// @Override
// public void onComplete() {
// MvpRef.get().disLoadings();
// }
// });
}
}

View File

@@ -0,0 +1,423 @@
package com.xscm.moduleutil.base;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.Base64;
import android.webkit.WebView;
import androidx.multidex.MultiDex;
import androidx.multidex.MultiDexApplication;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ProcessUtils;
import com.blankj.utilcode.util.ServiceUtils;
import com.lahm.library.EasyProtectorLib;
import com.lahm.library.EmulatorCheckCallback;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.event.AppLifecycleEvent;
import com.xscm.moduleutil.interfaces.AppLifecycleUtil;
import com.xscm.moduleutil.listener.MessageListenerSingleton;
import com.xscm.moduleutil.rtc.AgoraManager;
import com.xscm.moduleutil.service.MyMqttService;
import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.utils.UtilConfig;
import com.xscm.moduleutil.utils.config.EnvironmentEnum;
import com.xscm.moduleutil.utils.config.EnvironmentPrefs;
import com.xscm.moduleutil.widget.CommonAppConfig;
import com.xscm.moduleutil.widget.PiaoPingManager;
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.header.ClassicsHeader;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.interfaces.TUICallback;
import org.greenrobot.eventbus.EventBus;
import java.lang.reflect.Method;
import java.security.MessageDigest;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import lombok.Getter;
/**
* Created by cxf on 2017/8/3.
*/
public class CommonAppContext extends MultiDexApplication {
private static CommonAppContext sInstance;
private static Handler sMainThreadHandler;
private int mCount;
private boolean mFront;//是否前台
public String emulator = "0";
@Getter
private EnvironmentEnum currentEnvironment;
public UserBean mUserBean;
public boolean isShow;
public boolean isPlaying;
public String playId;
public String playCover;
public boolean showSelf;//盲盒是否能送自己
public String playName;
private final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
private ScheduledExecutorService scheduledExecutorServiceRoom = null;
@Override
public void onCreate() {
super.onCreate();
sInstance = this;
sMainThreadHandler = new Handler();
EnvironmentPrefs prefs = new EnvironmentPrefs(this);
currentEnvironment = prefs.getSelectedEnvironment();
initialization();
piaoPingManager = PiaoPingManager.getInstance(this);
}
public void initialization(){
UtilConfig.init(this);
registerActivityLifecycleCallbacks();
initWebView();
if (ProcessUtils.isMainProcess()) {
initARouter();
if (SpUtil.isAgreePolicy()) {
checkInEmulator();
UtilConfig.checkInEmulator();
AgoraManager.getInstance(this).init(currentEnvironment.getSwSdkAppId());
MessageListenerSingleton.getInstance();
CrashReport.initCrashReport(this, "ac3ed4d89f", true);/*bugly初始化*/
ServiceUtils.startService(MyMqttService.class);/*Mqtt初始化*/
// 每次启动应用时重置状态
SpUtil.getInstance().setBooleanValue("youth_model_shown", false);
}
}
}
private PiaoPingManager piaoPingManager;
private void initARouter() {
if (true) {
ARouter.openDebug();
ARouter.openLog();
}
ARouter.init(this);
}
private void initWebView() {
//Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName(this);
if (!AppUtils.getAppPackageName().equals(processName)) {//判断不等于默认进程名称
WebView.setDataDirectorySuffix(processName);
}
}
}
public String getProcessName(Context context) {
if (context == null) return null;
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == android.os.Process.myPid()) {
return processInfo.processName;
}
}
return null;
}
@Override
protected void attachBaseContext(Context base) {
MultiDex.install(this);
super.attachBaseContext(base);
}
public static CommonAppContext getInstance() {
if (sInstance == null) {
try {
Class clazz = Class.forName("android.app.ActivityThread");
Method method = clazz.getMethod("currentApplication", new Class[]{});
Object obj = method.invoke(null, new Object[]{});
if (obj != null && obj instanceof CommonAppContext) {
sInstance = (CommonAppContext) obj;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return sInstance;
}
public void checkInEmulator() {
emulator = EasyProtectorLib.checkIsRunningInEmulator(this, new EmulatorCheckCallback() {
@Override
public void findEmulator(String emulatorInfo) {
// Logger.e(emulatorInfo);
}
}) ? "1" : "0";
}
public static void postDelayed(Runnable runnable, long delayMillis) {
if (sMainThreadHandler != null) {
sMainThreadHandler.postDelayed(runnable, delayMillis);
}
}
public static void post(Runnable runnable) {
if (sMainThreadHandler != null) {
sMainThreadHandler.post(runnable);
}
}
public String getToken() {
return SpUtil.getToken();
}
private void registerActivityLifecycleCallbacks() {
registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
mCount++;
if (!mFront) {
mFront = true;
LogUtils.e("AppContext------->处于前台");
EventBus.getDefault().post(new AppLifecycleEvent(true));
CommonAppConfig.getInstance().setFrontGround(true);
// FloatWindowHelper.setFloatWindowVisible(true);
AppLifecycleUtil.onAppFrontGround();
// 确保在主线程中订阅
if (activity != null && !activity.isFinishing()) {
activity.runOnUiThread(() -> {
if (piaoPingManager != null) {
piaoPingManager.subscribe();
}
});
}
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
mCount--;
if (mCount == 0) {
mFront = false;
LogUtils.e("AppContext------->处于后台");
EventBus.getDefault().post(new AppLifecycleEvent(false));
CommonAppConfig.getInstance().setFrontGround(false);
// FloatWindowHelper.setFloatWindowVisible(false);
AppLifecycleUtil.onAppBackGround();
if (activity != null && !activity.isFinishing()) {
activity.runOnUiThread(() -> {
if (piaoPingManager != null) {
piaoPingManager.unsubscribe();
}
});
}
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
/**
* 获取App签名md5值
*/
public String getAppSignature() {
try {
PackageInfo info =
this.getPackageManager().getPackageInfo(this.getPackageName(),
PackageManager.GET_SIGNATURES);
if (info != null) {
Signature[] signs = info.signatures;
byte[] bytes = signs[0].toByteArray();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(bytes);
bytes = md.digest();
StringBuilder stringBuilder = new StringBuilder(2 * bytes.length);
for (int i = 0; ; i++) {
if (i >= bytes.length) {
return stringBuilder.toString();
}
String str = Integer.toString(0xFF & bytes[i], 16);
if (str.length() == 1) {
str = "0" + str;
}
stringBuilder.append(str);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取facebook散列秘钥
*/
public String getFacebookHashKey() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (Exception e) {
return "get error";
}
return null;
}
public boolean isFront() {
return mFront;
}
public void startInitSdk() {
UserBean userBean = SpUtil.getUserBean();
if (userBean != null) {
// 在用户 UI 点击登录的时候调用
TUILogin.login(getBaseContext(), CommonAppContext.getInstance().getCurrentEnvironment().getSdkAppId(), "u" + userBean.getUser_id(), userBean.getTencent_im(), new TUICallback() {
@Override
public void onError(final int code, final String desc) {
LogUtils.e("@@@1", code, "描述:", desc);
}
@Override
public void onSuccess() {
LogUtils.e("@@@", "成功");
}
});
}
}
public void setUser(UserBean userBean) {
mUserBean = userBean;
SpUtil.saveUserId(userBean.getUser_id());
SpUtil.saveUserBean(userBean);
SpUtil.putToken(userBean.getToken());
}
public UserBean getUser() {
if (mUserBean == null) {
mUserBean = SpUtil.getUserBean();
}
return mUserBean;
}
public void setUserBean(UserBean bean) {
mUserBean = bean;
}
public void clearLoginInfo() throws ClassNotFoundException {
// mUid = null;
// mToken = null;
// SpUtil.getInstance().removeValue(
// SPConstants.USER_ID, SPConstants.TOKEN, SPConstants.USER_INFO
// );
isShow = false;
isPlaying = false;
mUserBean = null;
SpUtil.saveUserId(-1);
SpUtil.saveUserBean(new UserBean());
SpUtil.putToken("");
Intent intent = new Intent("com.example.action.LAUNCH_PAGE");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
// piaoPingManager.unsubscribe();
FileUtils.deleteAllInDir(getCacheDir());
FileUtils.deleteAllInDir(getExternalCacheDir());
AgoraManager.getInstance(getApplicationContext()).destroy();
// 每次启动应用时重置状态
SpUtil.setBooleanValue("youth_model_shown", false);
// 发送广播通知所有Activity刷新状态
Intent refreshIntent = new Intent("com.xscm.moduleutil.ACTION_USER_LOGOUT");
sendBroadcast(refreshIntent);
}
public static boolean isAlipayInstalled(Context context) {
try {
context.getPackageManager().getPackageInfo("com.eg.android.AlipayGphone", 0);
return true;//安装了支付宝
} catch (PackageManager.NameNotFoundException e) {
return false; //未安装支付宝
}
}
//static 代码段可以防止内存泄露
static {
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
ClassicsHeader header = new ClassicsHeader(context);
header.setDrawableSize(20);
header.setFinishDuration(0);
return header;//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header默认是 贝塞尔雷达Header
// return new CustomRefreshHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header默认是 贝塞尔雷达Header
}
});
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
ClassicsFooter classicsFooter = new ClassicsFooter(context);
classicsFooter.setDrawableSize(20);
classicsFooter.setFinishDuration(0);
//指定为经典Footer默认是 BallPulseFooter
return classicsFooter;
}
});
}
}

View File

@@ -0,0 +1,11 @@
package com.xscm.moduleutil.base;
import lombok.Data;
@Data
public class RoomRollModel {
private String room_id;
private String user_id;
private String pit_number;
private int number;
}

View File

@@ -0,0 +1,49 @@
package com.xscm.moduleutil.bean;
import com.chad.library.adapter.base.entity.MultiItemEntity;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
/**
*@author qx
*@data 2025/5/29
*@description: 相册列表
*/
@Data
public class AlbumBean implements Serializable {
private static final long serialVersionUID = 1L;
private String id;//相册id
private String name; //相册名称
private String image; //相册封面
private String pwd; //相册密码
private String read_num; //相册阅读数
private String is_pwd;
private String is_like;//是否点赞
private String like_num;//点赞数
private String count;//图片数量
private String user_id;
private List<ImageList> image_list;
@Data
public static class ImageList implements MultiItemEntity , Serializable{
private static final long serialVersionUID = 1L;
private String id; //图片id
private String image; //图片地址
private String content; //图片描述
private String createtime; //图片创建时间
private boolean isSelected; // 用于标记是否被选中
private int itemViewType = 1;
@Override
public int getItemType() {
return itemViewType;
}
}
}

View File

@@ -0,0 +1,23 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
*@author qx
*@data 2025/7/11
*@description:支付的时候,返回的参数
*/
@Data
public class AppPay {
private String ali;
private WxBean wx;
@Data
public static class WxBean {
private String appid;
private String noncestr;
private String partnerid;
private String prepayid;
private String timestamp;
private String sign;
}
}

View File

@@ -0,0 +1,19 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
* @Author $
* @Time $ $
* @Description $ 版本更新信息模型
*/
@Data
public class AppUpdateModel {
private int id;
private String version;//当前版本号
private String url;//下载地址
private String content;//更新内容
private String is_force;//是否强制更新
private String apiversion;//API版本号
private int code;//状态码
}

View File

@@ -0,0 +1,114 @@
package com.xscm.moduleutil.bean;
import android.text.TextUtils;
public class AttentionResp {
private String room_id;
private String room_name;
private String room_code;
private String popularity;
private String label_name;
private String label_icon;
private String owner_picture;
private String owner_nickname;
private int locked;
private String label_id;
public String getLabel_id() {
return label_id;
}
public void setLabel_id(String label_id) {
this.label_id = label_id;
}
private String cover_picture;
public String getRoomPicture() {
if (!TextUtils.isEmpty(cover_picture)) {
return cover_picture;
}
return owner_picture;
}
public String getCover_picture() {
return cover_picture;
}
public void setCover_picture(String cover_picture) {
this.cover_picture = cover_picture;
}
public int getLocked() {
return locked;
}
public void setLocked(int locked) {
this.locked = locked;
}
public String getRoom_id() {
return room_id;
}
public void setRoom_id(String room_id) {
this.room_id = room_id;
}
public String getRoom_name() {
return room_name;
}
public void setRoom_name(String room_name) {
this.room_name = room_name;
}
public String getRoom_code() {
return room_code;
}
public void setRoom_code(String room_code) {
this.room_code = room_code;
}
public String getPopularity() {
return popularity;
}
public void setPopularity(String popularity) {
this.popularity = popularity;
}
public String getLabel_name() {
return label_name;
}
public void setLabel_name(String label_name) {
this.label_name = label_name;
}
public String getLabel_icon() {
return label_icon;
}
public void setLabel_icon(String label_icon) {
this.label_icon = label_icon;
}
public String getOwner_picture() {
return owner_picture;
}
public void setOwner_picture(String owner_picture) {
this.owner_picture = owner_picture;
}
public String getOwner_nickname() {
return owner_nickname;
}
public void setOwner_nickname(String owner_nickname) {
this.owner_nickname = owner_nickname;
}
}

View File

@@ -0,0 +1,38 @@
package com.xscm.moduleutil.bean;
import com.stx.xhb.xbanner.entity.SimpleBannerInfo;
import java.util.ArrayList;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false)
@Data
public class BannerModel extends SimpleBannerInfo {
/**
* ad_id : 11
* type : 2
* title : 鱼糖语音·开服送好礼
* item_id : 9
* link_url : null
* content : https://gudao-prod.oss-cn-hangzhou.aliyuncs.com/user-dir/YZrsGTJR5F.jpg
* detail_pictures : null
*/
private String bid;
private String aid;
private String type;
private String show_type;
private String image;
private String url;
private ArrayList<String> detail_pictures;
@Override
public Object getXBannerUrl() {
return image;
}
}

View File

@@ -0,0 +1,10 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
@Data
public class BaseListData<T> {
private List<T> data;
}

View File

@@ -0,0 +1,28 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
* @author qx
* @data 2025/7/11
* @description:支付或者提现方式和状态
*/
@Data
public class BindType {
private AllData ali;
private AllData wx;
private AllData bank;
private AllData ali_tl;
private AllData wx_tl;
@Data
public static class AllData {
private String name;//名称
private String icon;//图标
private String is_with_draw_open;//提现状态是否打开
private String is_bind;//是否绑定 1是 0否
private String type;// 支付 | 提现类型
private String is_pay_open;//是否开启 1是 0否
}
}

View File

@@ -0,0 +1,21 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
@Data
public class BlackUserBean {
private int type;//0:关注1黑名单2粉丝
private int status;//0:未关注 1已关注
private int user_id;
private String createTime;
private String nickname;
private String avatar;
private int sex;
private String user_code;
private int is_online;
private int is_follow;
private List<String> icon;
}

View File

@@ -0,0 +1,20 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
*@author qx
*@data 2025/7/16
*@description: 房间排行榜
*/
@Data
public class CharmRankingResp {
private String user_id;
private String nickname;
private String avatar;
private List<String> icon;
private String total;
}

View File

@@ -0,0 +1,15 @@
package com.xscm.moduleutil.bean;
public class CheckTxtResp {
private int result;
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
}

View File

@@ -0,0 +1,49 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
* @author qx
* @data 2025/6/3
* @description: 这是广场中的列表数据
*/
@Data
public class CircleListBean {
private int id;//语圈ID
private int user_id;//用户ID
private String nickname;//用户昵称
private String avatar;//用户头像
private int is_like;//我是否点赞0没有1点赞
private int sex;//性别 1男2女
private String content;//内容
private String like_num;//点赞数
private String rewards_num; //打赏金额
private String is_room;//作者是否在房间中1在0不在
private String room_id;//作者所在房间ID is_room =0 此值小于0
private String comment_num;//评论数
private int is_recommend;//1非推荐2推荐
private String ip;//活跃地址
private String images;////图片 JSON字符串 封面获取第一张
private String createtime;//时间
private String topic_id;
private String share_url;
private List<HeatedBean> title;//话题列表
private String read_num;//阅读数
private List<LikeList> like_list;
@Data
public class LikeList {
private String user_id;
private String nickname;
private String avatar;
private int age;//年龄
private String sex;
private String constellation;//星座
private String birthday;//生日
}
}

View File

@@ -0,0 +1,30 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
* @Author lxj$
* @Time 2025-8-1 00:21:22$ $
* @Description $
*/
@Data
public class CombinedGiftBean {
private int gift_id;
private String gift_price;
private String gift_name;
private String base_image;
private String total_count;
private int top_users_count;
private List<TopUsers> top_users;
private boolean is_liang;
@Data
public static class TopUsers {
private int user_id;
private String nickname;
private String avatar;
private String count;
}
}

View File

@@ -0,0 +1,44 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
*@author qx
*@data 2025/5/30
*@description:评论实体
*/
@Data
public class CommentBean {
private int total;//评论总数
private List<CommentDetailsBean> list;
@Data
public static class CommentDetailsBean {
private int id;//评论ID
private int zone_id;//动态ID
private String content;//评论内容
private int createtime;
private int user_id;//评论者ID
private String nickname;
private String avatar;
private int is_author;//评论者是否作者 0不是1是
private List<Replies> replies;
@Data
public static class Replies {
private int id;//评论ID
private int zone_id;//动态ID
private String content;
private int createtime;
private int user_id;//评论者ID
private String nickname;
private String avatar;
private int pid;//上级评论的ID
private int is_author;//评论者是否作者 0不是1是
private int reply_to;//回复给谁的ID
private String reply_to_user;
}
}
}

View File

@@ -0,0 +1,428 @@
package com.xscm.moduleutil.bean;
import com.alibaba.fastjson.annotation.JSONField;
/**
* Created by cxf on 2017/8/5.
*/
public class ConfigBean {
private String version;//Android apk安装包 版本号
private String downloadApkUrl;//Android apk安装包 下载地址
private String updateDes;//版本更新描述
private String liveWxShareUrl;//直播间微信分享地址
private String liveShareTitle;//直播间分享标题
private String liveShareDes;//直播间分享描述
private String videoShareTitle;//短视频分享标题
private String videoShareDes;//短视频分享描述
private int videoAuditSwitch;//短视频审核是否开启
private int videoCloudType;//短视频云储存类型 1七牛云 2腾讯云
private String videoQiNiuHost;//短视频七牛云域名
private String txCosAppId;//腾讯云存储appId
private String txCosRegion;//腾讯云存储区域
private String txCosBucketName;//腾讯云存储桶名字
private String txCosVideoPath;//腾讯云存储视频文件夹
private String txCosImagePath;//腾讯云存储图片文件夹
private String coinName;//钻石名称
private String votesName;//映票名称
private String scoreName;//积分名称
private String[] liveTimeCoin;//直播间计时收费规则
private String[] loginType;//三方登录类型
private String[][] liveType;//直播间开播类型
private String[] shareType;//分享类型
// private List<LiveClassBean> liveClass;//直播分类
private String videoClass;//短视频分类
private int maintainSwitch;//维护开关
private String maintainTips;//维护提示
private String mAdInfo;//引导页 广告信息
private int priMsgSwitch;//私信开关
private int forceUpdate;//强制更新
private String mWaterMarkUrl;//水印
private String mShopSystemName;//商店名称
private String beautyAppId;//美颜鉴权AppId
private String beautyKey;//美颜鉴权AppKey
private int mOpenInstallSwitch;
private String teenager_des;
private int leaderboard_switch;
private String mAgoraAppId;//声网appId
@JSONField(name = "apk_ver")
public String getVersion() {
return version;
}
@JSONField(name = "apk_ver")
public void setVersion(String version) {
this.version = version;
}
@JSONField(name = "apk_url")
public String getDownloadApkUrl() {
return downloadApkUrl;
}
@JSONField(name = "apk_url")
public void setDownloadApkUrl(String downloadApkUrl) {
this.downloadApkUrl = downloadApkUrl;
}
@JSONField(name = "apk_des")
public String getUpdateDes() {
return updateDes;
}
@JSONField(name = "apk_des")
public void setUpdateDes(String updateDes) {
this.updateDes = updateDes;
}
@JSONField(name = "wx_siteurl")
public void setLiveWxShareUrl(String liveWxShareUrl) {
this.liveWxShareUrl = liveWxShareUrl;
}
@JSONField(name = "wx_siteurl")
public String getLiveWxShareUrl() {
return liveWxShareUrl;
}
@JSONField(name = "share_title")
public String getLiveShareTitle() {
return liveShareTitle;
}
@JSONField(name = "share_title")
public void setLiveShareTitle(String liveShareTitle) {
this.liveShareTitle = liveShareTitle;
}
@JSONField(name = "share_des")
public String getLiveShareDes() {
return liveShareDes;
}
@JSONField(name = "share_des")
public void setLiveShareDes(String liveShareDes) {
this.liveShareDes = liveShareDes;
}
@JSONField(name = "name_coin")
public String getCoinName() {
return coinName;
}
@JSONField(name = "name_coin")
public void setCoinName(String coinName) {
this.coinName = coinName;
}
@JSONField(name = "name_score")
public String getScoreName() {
return scoreName;
}
@JSONField(name = "name_score")
public void setScoreName(String scoreName) {
this.scoreName = scoreName;
}
@JSONField(name = "name_votes")
public String getVotesName() {
return votesName;
}
@JSONField(name = "name_votes")
public void setVotesName(String votesName) {
this.votesName = votesName;
}
@JSONField(name = "live_time_coin")
public String[] getLiveTimeCoin() {
return liveTimeCoin;
}
@JSONField(name = "live_time_coin")
public void setLiveTimeCoin(String[] liveTimeCoin) {
this.liveTimeCoin = liveTimeCoin;
}
@JSONField(name = "login_type")
public String[] getLoginType() {
return loginType;
}
@JSONField(name = "login_type")
public void setLoginType(String[] loginType) {
this.loginType = loginType;
}
@JSONField(name = "live_type")
public String[][] getLiveType() {
return liveType;
}
@JSONField(name = "live_type")
public void setLiveType(String[][] liveType) {
this.liveType = liveType;
}
@JSONField(name = "share_type")
public String[] getShareType() {
return shareType;
}
@JSONField(name = "share_type")
public void setShareType(String[] shareType) {
this.shareType = shareType;
}
// @JSONField(name = "liveclass")
// public List<LiveClassBean> getLiveClass() {
// return liveClass;
// }
//
// @JSONField(name = "liveclass")
// public void setLiveClass(List<LiveClassBean> liveClass) {
// this.liveClass = liveClass;
// }
@JSONField(name = "videoclass")
public String getVideoClass() {
return videoClass;
}
@JSONField(name = "videoclass")
public void setVideoClass(String videoClass) {
this.videoClass = videoClass;
}
@JSONField(name = "maintain_switch")
public int getMaintainSwitch() {
return maintainSwitch;
}
@JSONField(name = "maintain_switch")
public void setMaintainSwitch(int maintainSwitch) {
this.maintainSwitch = maintainSwitch;
}
@JSONField(name = "maintain_tips")
public String getMaintainTips() {
return maintainTips;
}
@JSONField(name = "maintain_tips")
public void setMaintainTips(String maintainTips) {
this.maintainTips = maintainTips;
}
@JSONField(name = "sprout_appid")
public String getBeautyAppId() {
return beautyAppId;
}
@JSONField(name = "sprout_appid")
public void setBeautyAppId(String beautyAppId) {
this.beautyAppId = beautyAppId;
}
@JSONField(name = "sprout_key")
public String getBeautyKey() {
return beautyKey;
}
@JSONField(name = "sprout_key")
public void setBeautyKey(String beautyKey) {
this.beautyKey = beautyKey;
}
public String[] getVideoShareTypes() {
return shareType;
}
@JSONField(name = "video_share_title")
public String getVideoShareTitle() {
return videoShareTitle;
}
@JSONField(name = "video_share_title")
public void setVideoShareTitle(String videoShareTitle) {
this.videoShareTitle = videoShareTitle;
}
@JSONField(name = "video_share_des")
public String getVideoShareDes() {
return videoShareDes;
}
@JSONField(name = "video_share_des")
public void setVideoShareDes(String videoShareDes) {
this.videoShareDes = videoShareDes;
}
@JSONField(name = "video_audit_switch")
public int getVideoAuditSwitch() {
return videoAuditSwitch;
}
@JSONField(name = "video_audit_switch")
public void setVideoAuditSwitch(int videoAuditSwitch) {
this.videoAuditSwitch = videoAuditSwitch;
}
@JSONField(name = "cloudtype")
public int getVideoCloudType() {
return videoCloudType;
}
@JSONField(name = "cloudtype")
public void setVideoCloudType(int videoCloudType) {
this.videoCloudType = videoCloudType;
}
@JSONField(name = "qiniu_domain")
public String getVideoQiNiuHost() {
return videoQiNiuHost;
}
@JSONField(name = "qiniu_domain")
public void setVideoQiNiuHost(String videoQiNiuHost) {
this.videoQiNiuHost = videoQiNiuHost;
}
@JSONField(name = "txcloud_appid")
public String getTxCosAppId() {
return txCosAppId;
}
@JSONField(name = "txcloud_appid")
public void setTxCosAppId(String txCosAppId) {
this.txCosAppId = txCosAppId;
}
@JSONField(name = "txcloud_region")
public String getTxCosRegion() {
return txCosRegion;
}
@JSONField(name = "txcloud_region")
public void setTxCosRegion(String txCosRegion) {
this.txCosRegion = txCosRegion;
}
@JSONField(name = "txcloud_bucket")
public String getTxCosBucketName() {
return txCosBucketName;
}
@JSONField(name = "txcloud_bucket")
public void setTxCosBucketName(String txCosBucketName) {
this.txCosBucketName = txCosBucketName;
}
@JSONField(name = "video_watermark")
public String getWaterMarkUrl() {
return mWaterMarkUrl;
}
@JSONField(name = "video_watermark")
public void setWaterMarkUrl(String waterMarkUrl) {
mWaterMarkUrl = waterMarkUrl;
}
@JSONField(name = "txvideofolder")
public String getTxCosVideoPath() {
return txCosVideoPath;
}
@JSONField(name = "txvideofolder")
public void setTxCosVideoPath(String txCosVideoPath) {
this.txCosVideoPath = txCosVideoPath;
}
@JSONField(name = "tximgfolder")
public String getTxCosImagePath() {
return txCosImagePath;
}
@JSONField(name = "tximgfolder")
public void setTxCosImagePath(String txCosImagePath) {
this.txCosImagePath = txCosImagePath;
}
@JSONField(name = "guide")
public String getAdInfo() {
return mAdInfo;
}
@JSONField(name = "guide")
public void setAdInfo(String adInfo) {
mAdInfo = adInfo;
}
@JSONField(name = "letter_switch")
public int getPriMsgSwitch() {
return priMsgSwitch;
}
@JSONField(name = "letter_switch")
public void setPriMsgSwitch(int priMsgSwitch) {
this.priMsgSwitch = priMsgSwitch;
}
@JSONField(name = "isup")
public int getForceUpdate() {
return forceUpdate;
}
@JSONField(name = "isup")
public void setForceUpdate(int forceUpdate) {
this.forceUpdate = forceUpdate;
}
@JSONField(name = "shop_system_name")
public String getShopSystemName() {
return mShopSystemName;
}
@JSONField(name = "shop_system_name")
public void setShopSystemName(String shopSystemName) {
mShopSystemName = shopSystemName;
}
@JSONField(name = "openinstall_switch")
public int getOpenInstallSwitch() {
return mOpenInstallSwitch;
}
@JSONField(name = "openinstall_switch")
public void setOpenInstallSwitch(int openInstallSwitch) {
mOpenInstallSwitch = openInstallSwitch;
}
public String getTeenager_des() {
return teenager_des;
}
public void setTeenager_des(String teenager_des) {
this.teenager_des = teenager_des;
}
public int getLeaderboard_switch() {
return leaderboard_switch;
}
public void setLeaderboard_switch(int leaderboard_switch) {
this.leaderboard_switch = leaderboard_switch;
}
@JSONField(name = "sw_app_id")
public String getAgoraAppId() {
return mAgoraAppId;
}
@JSONField(name = "sw_app_id")
public void setAgoraAppId(String agoraAppId) {
mAgoraAppId = agoraAppId;
}
}

View File

@@ -0,0 +1,21 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class ConfigThemeBean {
// 普通字体黑色 default is # 000000
private String textColor;
// 主题色 default is # 0dffb9
private String themeColor;
// 提示字体颜色 default is #9b9b9b
private String placehoulderTextColor;
// 按钮字体颜色 default is #333333
private String btnTextColor;
// 背景图片 default is green
private String backgroundImage;
// 底部工具栏
// @property (nonatomic,strong)NSArray <QXTabbarModel*>*tabbarArray;
}

View File

@@ -0,0 +1,44 @@
package com.xscm.moduleutil.bean;
import com.xscm.moduleutil.widget.picker.PickerView;
import lombok.Data;
@Data
public class DateBean implements PickerView.PickerItem {
private String text;
private int date;
public DateBean(String text, int date) {
this.text = text;
this.date = date;
}
public void setText(String text) {
this.text = text;
}
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
@Override
public String getText() {
return text;
}
@Override
public String toString() {
return "DateBean{" +
"text='" + text + '\'' +
", date=" + date +
'}';
}
}

View File

@@ -0,0 +1,24 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
*@author qx
*@data 2025/5/29
*@description: 扩列数据
*/
@Data
public class ExpandColumnBean {
private String user_id;
private String sex;
private String nickname;
private String avatar;
private String birthday;
private String loginip;
private String home_bgimages;
private int room_id;//房间id,当有参数的时候,就显示跟随,当没有的时候,就显示私信控件
private String agree;
private List<String> icon;
}

View File

@@ -0,0 +1,68 @@
package com.xscm.moduleutil.bean;
public class FaceBean {
/**
* number : 0
* face_spectial : https://gudao-prod.oss-cn-hangzhou.aliyuncs.com/user-dir/N4WsWKm4pS.gif
* pit : 9
* type : 1
*/
private int number;
private String face_spectial;
private String pit;
private int type;
private int millTime;
public FaceBean(int number, int type) {
this.number = number;
this.type = type;
}
public FaceBean() {
}
public FaceBean(String face_spectial, double time, int type) {
this.face_spectial = face_spectial;
this.type = type;
this.millTime = (int) (time * 1000);
}
public int getMillTime() {
return millTime;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getFace_spectial() {
return face_spectial;
}
public void setFace_spectial(String face_spectial) {
this.face_spectial = face_spectial;
}
public String getPit() {
return pit;
}
public void setPit(String pit) {
this.pit = pit;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}

View File

@@ -0,0 +1,13 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
* @Author lxj$
* @Time 2025-8-2 09:13:25$ $
* @Description 首页判断参数$
*/
@Data
public class FirstChargeBean {
private int permission;
}

View File

@@ -0,0 +1,34 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
* @Author lxj$
* @Time 2025-8-2 10:46:27$ $
* @Description 首充好礼列表$
*/
@Data
public class FirstChargeGiftBean {
private String name;
private List<GiftBag> gift_bag;
@Data
public static class GiftBag {
private String name;
private String title1;
private String title2;
private String money;
private List<RoonGiftModel> gift_list;
// @Data
// public static class GiftList {
// private String gift_name;
// private int num;
// private int gift_price;
// private int type;
// private String base_image;
//
// }
}
}

View File

@@ -0,0 +1,13 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
@Data
public class FromUserInfo {
private String nickname;
private String avatar;
private String user_id;
private List<String> icon;
}

View File

@@ -0,0 +1,15 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class GiftBean {
private String gift_id;
private String gift_name;
private String gift_price;
private int file_type;
private String play_image;
private String base_image;
private String gift_type;
}

View File

@@ -0,0 +1,60 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
*@author qx
*@data 2025/5/27
*@description: 礼盒数据
*/
@Data
public class GiftBoxBean {
private String user_gold;//累计获取的金币
private List<GiftBean> gift_box_list;
private TaskDataBean tasks;
@Data
public static class GiftBean {
// private String giftName; //初级礼盒、高级礼盒
// private String giftTitle; //最高可以获得的金币数
// private String getGiftTypeName; //满多少个金币
// private String giftTypeNumber; //当前的百分比
// private String giftTypeStatus; //是否已经可以
private String id;//礼盒ID
private String name;//礼盒名称
private String title; //标题
private String icon ;//图标
private String highest_gain;//最高获得金币数
private String meet;//满多少金币可抽
private String unlock_progress;// //解锁进度
private String all_number;// //今日可抽奖次数
private String taday_number;////今日剩余抽奖次数
private String taday_number_left;// //今日剩余抽奖次数
private String status;////状态:0 '未解锁 1已解锁 2抽奖次数已用完
private String status_str;//"已解锁(0/2)"
}
@Data
public static class TaskDataBean {
private List<DailyTasksBean> daily_tasks;
private List<DailyTasksBean> daily_tasks_special;
private List<DailyTasksBean> usual_tasks;
@Data
public static class DailyTasksBean {
private int task_id;////任务Id
private String task_name;//任务名称
private String icon;//图标
private int gold_reward; //奖励金币
private int target_quantity;//目标完成数量
private int task_type;//任务类型 1每日任务 2每日特殊任务 3平台常规任务
private int task_status;//任务状态1完成 2去领取 3已领取
private String task_type_str; //任务状态
private int processing_type;//跳转状态:
private String processing_type_str;//跳转状态
private String from_id;
}
}
}

View File

@@ -0,0 +1,15 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
*@author qx
*@data 2025/7/12
*@description: 礼盒记录
*/
@Data
public class GiftBoxRecordBean {
private String gift_bag_name;
private String gift_name;
private String createtime;
}

View File

@@ -0,0 +1,9 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class GiftLabelBean {
private String id;
private String name;
}

View File

@@ -0,0 +1,13 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
*@author qx
*@data 2025/7/12
*@description: 开启礼盒后获取的礼物名称
*/
@Data
public class GiftName {
private String gift_name;
}

View File

@@ -0,0 +1,35 @@
package com.xscm.moduleutil.bean;
/**
*@author qx
*@data 2025/5/30
*@description: 礼物打赏数量
*/
public class GiftNumBean {
private String number;
private String text;
public GiftNumBean() {
}
public GiftNumBean(String number, String text) {
this.number = number;
this.text = text;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}

View File

@@ -0,0 +1,18 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
*@author qx
*@data 2025/7/12
*@description: 获取背包礼物列表
*/
@Data
public class GiftPackBean {
private String gift_id;
private String gift_name;
private String base_image;
private String gift_price;
private String num;
private boolean isChecked;
}

View File

@@ -0,0 +1,36 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
* @Author lxj$
* @Time $ $
* @Description $ 礼物墙展示接口
*/
@Data
public class GiftUserWallBean {
private List<GiftWallBean> liang;
private List<GiftWallBean> no_liang;
@Data
public static class GiftWallBean {
private int gift_id;
private String gift_price;
private String gift_name;
private String base_image;
private String total_count;
private int top_users_count;
private List<CombinedGiftBean.TopUsers> top_users;
private boolean is_liang;
// @Data
// public static class TopUsers {
// private int user_id;
// private String nickname;
// private String avatar;
// private String count;
// }
}
}

View File

@@ -0,0 +1,26 @@
package com.xscm.moduleutil.bean;
import java.io.Serializable;
import lombok.Data;
/**
*@author qx
*@data 2025/7/10
*@description:发布头条需要的参数
*/
@Data
public class HeadlineBean implements Serializable {
private String countdown;
private String now_money;
private String next_money;
private String id;
private String user_id;//用户ID
private String content;//内容
private String money;//花了多钱发的这个头条
private String nickname;//昵称
private String avatar;//头像
private String end_time;//倒计时时间
private String room_id;
}

View File

@@ -0,0 +1,16 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
*@author qx
*@data 2025/7/16
*@description:抢头条推送过来的参数
*/
@Data
public class HeadlineEvent {
private int type;
private String content;
private UserInfo user_info;
private String room_id;
private String end_time;
}

View File

@@ -0,0 +1,53 @@
package com.xscm.moduleutil.bean;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data;
/**
*@author qx
*@data 2025/5/30
*@description: 话题实体
*/
@Data
public class HeatedBean implements Parcelable {
private String title;//话题
private String topic_id;//话题id
private String count;//引用数量
private String pic; //图片
private String content;//内容
protected HeatedBean(Parcel in) {
title = in.readString();
topic_id = in.readString();
count = in.readString();
pic = in.readString();
content = in.readString();
}
public static final Creator<HeatedBean> CREATOR = new Creator<HeatedBean>() {
@Override
public HeatedBean createFromParcel(Parcel in) {
return new HeatedBean(in);
}
@Override
public HeatedBean[] newArray(int size) {
return new HeatedBean[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(title);
dest.writeString(topic_id);
dest.writeString(count);
dest.writeString(pic);
dest.writeString(content);
}
}

View File

@@ -0,0 +1,13 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class HeavenGiftBean {
private String title;
private String picture;
private int type;
private String quantity;
private String gold;
private String days;
}

View File

@@ -0,0 +1,26 @@
package com.xscm.moduleutil.bean;
import com.chad.library.adapter.base.entity.MultiItemEntity;
import lombok.Data;
@Data
public class HomeBean implements MultiItemEntity {
private int itemViewType = 2;
private String user_id;
private String head_picture;
private String nickname;
private String sex;
private String signature;
private String constellation;
private String birthday;
private String intro_voice;
private String intro_voice_time;
private String offline_time;
private int age;
private int is_online;
@Override
public int getItemType() {
return itemViewType;
}
}

View File

@@ -0,0 +1,42 @@
package com.xscm.moduleutil.bean;
import com.example.moduletablayout.listener.CustomTabEntity;
/**
* 项目名称 qipao-android
* 包名com.qpyy.module.me.bean
* 创建人 黄强
* 创建时间 2020/12/1 17:40
* 描述 describe
*/
public class HomePageTabBean implements CustomTabEntity {
public HomePageTabBean(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
private String title;
@Override
public String getTabTitle() {
return title;
}
@Override
public int getTabSelectedIcon() {
return 0;
}
@Override
public int getTabUnselectedIcon() {
return 0;
}
}

View File

@@ -0,0 +1,13 @@
package com.xscm.moduleutil.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class HomeRoomInfo {
private String room_name;
private String cover_picture;
}

View File

@@ -0,0 +1,20 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
@Data
public class HostBean {
private String id;
private String user_id;
private String room_id;
private String nickname;
private String avatar;
private String sex;
private String type;//类型 1主持人 2管理员
private String ratio;//主持人收益比
private List<String> icon;//
private String earnings;//收益
}

View File

@@ -0,0 +1,132 @@
package com.xscm.moduleutil.bean;
import android.text.TextUtils;
public class ManageRoomResp {
private String id;
private String room_id;
private String room_name;
private String room_code;
private String popularity;
private String label_name;
private String label_icon;
private String owner_picture;
private String owner_nickname;
private int sys_type_id;
private int locked;
private String label_id;
public String getLabel_id() {
return label_id;
}
public void setLabel_id(String label_id) {
this.label_id = label_id;
}
private String cover_picture;
public String getRoomPicture() {
if (!TextUtils.isEmpty(cover_picture)) {
return cover_picture;
}
return owner_picture;
}
public String getCover_picture() {
return cover_picture;
}
public void setCover_picture(String cover_picture) {
this.cover_picture = cover_picture;
}
public int getLocked() {
return locked;
}
public void setLocked(int locked) {
this.locked = locked;
}
public int getSys_type_id() {
return sys_type_id;
}
public void setSys_type_id(int sys_type_id) {
this.sys_type_id = sys_type_id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRoom_id() {
return room_id;
}
public void setRoom_id(String room_id) {
this.room_id = room_id;
}
public String getRoom_name() {
return room_name;
}
public void setRoom_name(String room_name) {
this.room_name = room_name;
}
public String getRoom_code() {
return room_code;
}
public void setRoom_code(String room_code) {
this.room_code = room_code;
}
public String getPopularity() {
return popularity;
}
public void setPopularity(String popularity) {
this.popularity = popularity;
}
public String getLabel_name() {
return label_name;
}
public void setLabel_name(String label_name) {
this.label_name = label_name;
}
public String getLabel_icon() {
return label_icon;
}
public void setLabel_icon(String label_icon) {
this.label_icon = label_icon;
}
public String getOwner_picture() {
return owner_picture;
}
public void setOwner_picture(String owner_picture) {
this.owner_picture = owner_picture;
}
public String getOwner_nickname() {
return owner_nickname;
}
public void setOwner_nickname(String owner_nickname) {
this.owner_nickname = owner_nickname;
}
}

View File

@@ -0,0 +1,14 @@
package com.xscm.moduleutil.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class MixerResp {
private int id;
private String name;
private int imgUrtl;
}

View File

@@ -0,0 +1,28 @@
package com.xscm.moduleutil.bean;
import java.io.Serializable;
import lombok.Data;
/**
*@author qx
*@data 2025/6/19
*@description: 已点歌曲实体
*/
@Data
public class MusicSongBean implements Serializable {
private String did;//歌曲id
private String room_id;
private String song_code;//歌曲唯一标识
private String song_name;//歌曲名称
private String singer;//歌手
private String poster;//封面
private String duration;//播放时长
private int sort;//
private String user_id;
private String nickname;
private String avatar;
private String dress;
private String charm;
private int is_hot;//是否是主持并且是在9号麦位上
}

View File

@@ -0,0 +1,14 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class MyBagBean {
private String myBagTitle;
private String myBagType;
public MyBagBean(String myBagTitle, String myBagType) {
this.myBagTitle = myBagTitle;
this.myBagType = myBagType;
}
}

View File

@@ -0,0 +1,12 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class MyBagDataBean {
private String title;
private String giftName;
private String time;
private String base_image;
}

View File

@@ -0,0 +1,19 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
*@author qx
*@data 2025/7/1
*@description: cp房实体类
*/
@Data
public class MyCpRoom {
private String room_name;
private int room_number;
private String end_time;
private String user1_avatar;
private String user2_avatar;
private int earnings;
private String relation;
private String room_id;
}

View File

@@ -0,0 +1,27 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class MyFootResp {
private String room_number;//房间号
private String room_name;//房间名称
private String room_code;
private String popularity;
private String hot_value;
private String label_name;
private String label_icon;//房间标签图标
private String owner_picture;
private String owner_nickname;
private String room_id;//房间id
private int locked;
private String label_id; //房间标签id
private String room_intro; //房间简介
private String room_cover;//房间封面
private String user_count;//人数
private String room_password;//密码
}

View File

@@ -0,0 +1,73 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
* @author qx
* @data 2025/6/11
* @description: 我创建的房间
*/
@Data
public class MyRoomBean {
/*
"room_id": "10184180",
"cover_picture": "httpss://osschumeng.oss-cn-beijing.aliyuncs.com/img/e86e2efe3f4412561e9c30326162d946.jpg",
"room_name": "钊的房间",
"online_num": 0,
"label_id": "23",
"label_name": "聊天",
"label_icon": "",
"favorite_count": "0",
"come_count": "161",
"today_income": 0
*/
private String room_id;
private String room_number;
private String user_id;
private String nickname;
private String room_name; //房间名称
private String room_cover;//房间封面
private String apply_status;//房间状态1:申请中2:申请通过3:申请被拒绝
private String room_status;//房间状态1:正常2:封禁3:关闭
private String room_password;//房间密码
private String type_id;//房间类型id
private String type_name;//类型名称
private String label_icon; //分类图标
private String label_id; //分类id
private String is_user_code;//是否使用靓号10
private String today_profit;//今日收益
private int online_num; //房间在线人数
private int visit_num;//访问人数
private int follow_num;//房间关注人数
private String ratio;//房间提成
private List<CpRoom> cp_room;
private String room_intro;//房间介绍
private String user_count;//房间人数
private String label_name; //房间类型名称
private String favorite_count; //房间收藏数
private String come_count; //房间进入数
private Double today_income; //今日收益;
private int earnings_ratio;//房间收益比例
@Data
static class CpRoom {
private String id;
private String room_name;
private String room_number;
private String end_time;
private String earnings;
private String user1_avatar;
private String user2_avatar;
}
}

View File

@@ -0,0 +1,27 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
@Data
public class NewsDataBean {
private int system_no_read_count; //系统消息未读总数
private SystemMessage system_last_message;//最后一条未读系统消息
private int announcement_read_count; //未读官方公告总数
private SystemMessage announcement_last_message;//最后一条未读官方公告
@Data
public static class SystemMessage {
private int id; //消息ID
private int type; //消息类型
private int admin_id; //管理员ID
private String content; //内容
private String title; //标题
private String image;
private int room_id; //房间ID
private String url;
private String updatetime; //更新时间
private String delete_time; //删除时间
private String createtime; //创建时间
}
}

View File

@@ -0,0 +1,25 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
* @Author lxj$
* @Time 2025年7月23日$ $
* @Description 消息列表$
*/
@Data
public class NewsMessageList {
private int id;
private int type;//类型 1系统消息 2官方公告 3活动中心
private int admin_id;
private String title;//标题
private String content;//内容
private String source_id;//来源id
private String is_read;//是否已读 0未读 1已读
private String image;
private int room_id; //大于0的时候点击进入房间 等于0的时候url不为空跳转单页
private String url;
private String createtime;
private String updatetime;
private String delete_time;
}

View File

@@ -0,0 +1,13 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
*@author qx
*@data 2025/6/7
*@description: 装扮类型表
*/
@Data
public class PersonaltyBean {
private String id;
private String name;
}

View File

@@ -0,0 +1,93 @@
package com.xscm.moduleutil.bean;
import java.io.Serializable;
import java.util.List;
public class PhotoWallResp implements Serializable {
public String getVedio() {
return vedio;
}
public void setVedio(String vedio) {
this.vedio = vedio;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getVedio_cover() {
return vedio_cover;
}
public void setVedio_cover(String vedio_cover) {
this.vedio_cover = vedio_cover;
}
public List<GiftResp> getList() {
return list;
}
public void setList(List<GiftResp> list) {
this.list = list;
}
private String vedio;
private String avatar;
private String vedio_cover;
private List<GiftResp> list;
public static class GiftResp implements Serializable {
public GiftResp(String id, String url, int width, int height) {
this.id = id;
this.url = url;
this.width = width;
this.height = height;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
private String id;
private String url;
private int width;
private int height;
}
}

View File

@@ -0,0 +1,13 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
* @Author lxj$
* @Time 2025-8-5 01:38:04$ $
* @Description 更新用户声网token$
*/
@Data
public class PkSwTokenBean {
private String agora_token;
}

View File

@@ -0,0 +1,84 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
*@author qx
*@data 2025/7/11
*@description: 榜单实体类
*/
@Data
public class PlaceholderBean {
private MyRanking my_ranking;//自己的排行信息
private List<ListsBean> lists;//榜单信息
@Data
public static class MyRanking {
private String avatar;
private String nickname;
private String user_id;
private String user_code;//
private String sex;//性别
private List<String> icon;//
private String total;//值
private String rank;//排名
private String diff;//差上榜需要这么多
private String room_name;
private String room_id;
private String room_cover;
private int id;//公会id
private String guild_special_id;
private String guild_name;
private String cover;
private int num;
private int expenditure;
private String intro;
private String createtime;
private String updatetime;
private String delete_time;
private int is_show;
private int status;
private String user_id1;
private String user_avatar;
private String user_avatar1;
}
@Data
public static class ListsBean {
private String user_id;
private String nickname;
private String avatar;
private String total;
private String rank;
private List<String> icon;
private String room_name;
private String room_id;
private String room_cover;
private int id;//公会id
private String guild_special_id;
private String guild_name;
private String cover;
private int num;
private int expenditure;
private String intro;
private String createtime;
private String updatetime;
private String delete_time;
private int is_show;
private int status;
private int income;
private String user_id1;
private String user_avatar;
private String user_avatar1;
}
}

Some files were not shown because too many files have changed in this diff Show More