修改交友布局

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,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();
}
}