This commit is contained in:
fengjignqi
2026-05-16 16:19:39 +08:00
commit 1b1575eb8a
1632 changed files with 242221 additions and 0 deletions

View File

@@ -0,0 +1,890 @@
package com.ckkj.water.base;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.viewbinding.ViewBinding;
import com.esafirm.imagepicker.features.ImagePicker;
import com.ckkj.water.AppConfig;
import com.ckkj.water.ConstantUtil;
import com.ckkj.water.EventMessage;
import com.ckkj.water.R;
import com.ckkj.water.dialog.LoadingDialog;
import com.ckkj.water.login.LoginActivity;
import com.ckkj.water.utils.dataUtil.SharePreUtil;
import com.ckkj.water.utils.manager.ActivityManager;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;
import pub.devrel.easypermissions.EasyPermissions;
/**
* 所有Fragment基类
* @param <P>
*/
@SuppressWarnings({ "unchecked" })
public abstract class BaseFragment<T extends ViewBinding,P extends IPresenter> extends Fragment implements IView, EasyPermissions.PermissionCallbacks {
protected String TAG = "MING_DENG";
protected Activity activity;
protected P mPresenter;
protected Dialog loadingDialog;
protected T viewBinding;
protected Activity mContext;
protected final int REQUEST_CODE_100 = 100;
protected final int REQUEST_CODE_200 = 200;
protected static final int REQUEST_EVENT_CODE_10001 = 10001;
protected static final int REQUEST_EVENT_CODE_10002 = 10002;
protected static final int REQUEST_EVENT_CODE_10003 = 10003;
private static final AtomicBoolean isDialogShown = new AtomicBoolean(false); // 使用 AtomicBoolean 保证线程安全
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
initArgs(getArguments());
}
@Override
public void onResume() {
super.onResume();
onResumeInitData();
}
public boolean hasRecordPermission(String permission) {
return EasyPermissions.hasPermissions(mContext, permission);
}
/**
* 获取权限
*
* @param permis
* @param title
* @param content
* @param requestCode String... permis
*/
public void getPermissionRequst(String permis, String title, String content, int requestCode) {
if (EasyPermissions.hasPermissions(mContext, permis)) {
// 已有权限,不需要处理
return;
}
// 还没权限,弹自定义确认弹窗
showDialogtext(mContext.getResources().getDrawable(R.mipmap.img_location),
false, false,
title,
content,
"不允许", "允许",
new BaseFragment.OnDialogClick() {
@Override
public void onCancelClick() {
// 用户点了"不允许",什么都不用做
}
@Override
public void onConfirmClick() {
showPermissionDialog(mContext.getResources().getDrawable(R.mipmap.img_permission_file),
true, title, content);
// 用户点了"允许",继续判断
if (ActivityCompat.shouldShowRequestPermissionRationale(mContext, permis)) {
// 用户之前拒绝过,但没勾"不再询问" ➔ 直接请求权限
// 修复第一个参数应该是Fragment本身而不是Activity的context
EasyPermissions.requestPermissions(BaseFragment.this, content, requestCode, permis);
} else {
// 可能是第一次申请,也可能是勾了"不再询问"
// 用EasyPermissions继续请求系统自己决定弹不弹
// 修复第一个参数应该是Fragment本身而不是Activity的context
EasyPermissions.requestPermissions(BaseFragment.this, content, requestCode, permis);
}
}
});
}
/**
* 判断Fragment是否真正对用户可见
*/
protected boolean isFragmentVisible() {
return isVisible() && isResumed();
}
/**
* 可见时初始化数据
*/
protected void onResumeInitData() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createLoadingDialog(getActivity());
mPresenter = createPresenter();//创建presenter
}
@Nullable
@Override
public View onCreateView(@Nullable LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle state) {
mContext = getActivity();
activity = getActivity();
EventBus.getDefault().register(this);
ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
Class cls = (Class) type.getActualTypeArguments()[0];
try {
Method inflate = cls.getDeclaredMethod("inflate", LayoutInflater.class, ViewGroup.class, boolean.class);
viewBinding = (T) inflate.invoke(null, inflater, container, false);
} catch (NoSuchMethodException | IllegalAccessException| InvocationTargetException e) {
e.printStackTrace();
}
initView();
return viewBinding.getRoot();
}
@Subscribe(threadMode = ThreadMode.MainThread)
public void onGetMessage(EventMessage message) {
Log.d("DINGDING", "BaseFragment收到EventBus消息: " + message.msg);
if (message.msg.equals(EventMessage.USER_LOGIN_LOST)) {
Log.d("DINGDING","Fragment接收一次");
Log.d("DINGDING", "当前Fragment状态: isDetached=" + isDetached() + ", isRemoving=" + isRemoving());
// 检查Fragment状态如果正在销毁则不处理
if (isDetached() || isRemoving()) {
Log.d("DINGDING", "Fragment正在销毁跳过处理");
return;
}
// 检查Activity状态如果Activity正在销毁则不处理
if (mContext == null || mContext.isFinishing() || mContext.isDestroyed()) {
Log.d("DINGDING", "Fragment所属Activity正在销毁跳过处理");
return;
}
if (isDialogShown.compareAndSet(false, true)) {
Log.d("DINGDING","Fragment触发弹窗");
AppConfig.USER_LOGIN = false;
AppConfig.MEMBER_ID = 0;
AppConfig.USER_TOKEN = "";
AppConfig.USER_ID = "";
SharePreUtil.putBoolean(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.USER_LOGIN, AppConfig.USER_LOGIN);
// 确保在主线程中执行
mContext.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
// 再次检查Fragment和Activity状态
if (isDetached() || isRemoving() || mContext == null || mContext.isFinishing() || mContext.isDestroyed()) {
Log.d("DINGDING", "Fragment或Activity已销毁取消弹窗");
isDialogShown.set(false);
return;
}
showDialogtextInterBackKey(null, false, false,
"提示",
"检测到您的账号在异地登录。若非本人操作,请立即修改密码并检查账号安全!",
"我知道了", "", // 交换参数位置
new OnDialogClick() {
@Override
public void onCancelClick() {
Log.d("DINGDING", "用户点击取消");
}
@Override
public void onConfirmClick() {
Log.d("DINGDING", "用户点击确定");
ActivityManager.removeAllActivityExceptMain();
goTo(mContext, LoginActivity.class, null);
isDialogShown.set(false);
}
}, true);
Log.d("DINGDING", "Fragment弹窗显示成功");
} catch (Exception e) {
Log.e("DINGDING", "Fragment弹窗显示失败", e);
isDialogShown.set(false);
}
}
});
} else {
Log.d("DINGDING", "Fragment弹窗已显示跳过");
}
} else if (message.msg.equals(EventMessage.CODE_LOGIN_LOST)) {
// 检查是否满足跳转条件
// if (MyApplication.canJump()) { // MyApplication is not defined in this file
// }
}
}
/**
* 初始化控件
*/
protected void initView() {
}
/**
* activity跳转
*/
protected void goToWihoutNoPresent(Context from, Class<? extends BaseActivityNoP> to, Bundle data) {
Intent i = new Intent();
i.setClass(from, to);
if (data != null) i.putExtras(data);
from.startActivity(i);
}
protected LoadingDialog mLoadingDialog;
public void showLoadingDialog() {
LoadingDialog dialog = mLoadingDialog;
if (dialog == null&& mContext != null) {
dialog = new LoadingDialog(mContext);
// 不可触摸取消
dialog.setCanceledOnTouchOutside(false);
// 强制取消关闭界面
dialog.setCancelable(true);
// dialog.setOnCancelListener(dialog1 -> finish());
mLoadingDialog = dialog;
} else {
dialog.dismiss();
}
if (dialog != null && mContext != null) {
try {
dialog.show();
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void createLoadingDialog(Context context){
LayoutInflater inflater = LayoutInflater.from(context);
@SuppressLint("InflateParams") View v = inflater.inflate(R.layout.dialog_loading, null);
LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_loading_view);
ImageView imgLoading = v.findViewById(R.id.img_loading);
loadingDialog = new Dialog(context, R.style.MyDialogStyle);
loadingDialog.setCanceledOnTouchOutside(false);
loadingDialog.setContentView(layout,
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
Window window = loadingDialog.getWindow();
if (window != null) {
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setGravity(Gravity.CENTER);
window.setAttributes(lp);
window.setWindowAnimations(R.style.PopWindowAnimStyle);
}
loadingDialog.setCanceledOnTouchOutside(false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (mPresenter != null) {
mPresenter.attachView(this);
}
initData(savedInstanceState);
}
public void imagePicker(int limitCount,int requestCode,Fragment fragment){
//获取相册
ImagePicker.create(fragment)
.folderMode(false)
.showCamera(false).limit(limitCount)
.start(requestCode);
String[] permis = {Manifest.permission.READ_EXTERNAL_STORAGE};
// if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
// //获取到了权限,可以请求地址显示
// if (EasyPermissions.hasPermissions(mContext, permis)) {
//
// }else{
// showDialogtext(mContext.getResources().getDrawable(R.mipmap.img_location), false, false,
// "相册访问权限", "超越仓需要您的授权,访问相册来上传资料",
// "不允许", "允许", new BaseFragment.OnDialogClick() {
// @Override
// public void onCancelClick() {
//
// }
//
// @Override
// public void onConfirmClick() {
// if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
//// Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
//// mContext.startActivity(intent);
// EasyPermissions.requestPermissions(mContext, "应用需要获相册授权",
// ConstantUtil.READ_EXTERNAL_STORAGE
// , Manifest.permission.READ_EXTERNAL_STORAGE);
// } else {
// EasyPermissions.requestPermissions(mContext, "应用需要获相册授权",
// ConstantUtil.READ_EXTERNAL_STORAGE
// , Manifest.permission.READ_EXTERNAL_STORAGE);
// }
// }
// });
// }
//// XXPermissions.with(mContext)
//// // 申请单个权限
//// .permission(Permission.READ_EXTERNAL_STORAGE)
//// .interceptor(new PermissionInterceptor())
//// .request(new OnPermissionCallback() {
//// @Override
//// public void onGranted(List<String> permissions, boolean all) {
////
//// }
////
//// @Override
//// public void onDenied(List<String> permissions, boolean never) {
//// if (never) {
//// Toast.makeText(mContext, "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show();
//// // 如果是被永久拒绝就跳转到应用权限系统设置页面
//// XXPermissions.startPermissionActivity(mContext, permissions);
//// } else {
//// Toast.makeText(mContext, "获取权限失败", Toast.LENGTH_SHORT).show();
//// }
//// return;
//// }
//// });
//
// } else {
// //获取到了权限,可以请求地址显示
// if (EasyPermissions.hasPermissions(mContext, permis)) {
// //获取相册
// ImagePicker.create(fragment)
// .folderMode(false)
// .showCamera(false).limit(limitCount)
// .start(requestCode);
// } else {
// showDialogtext(mContext.getResources().getDrawable(R.mipmap.img_location), false, false,
// "相册访问权限", "超越仓需要您的授权,访问相册来上传资料",
// "不允许", "允许", new BaseFragment.OnDialogClick() {
// @Override
// public void onCancelClick() {
//
// }
//
// @Override
// public void onConfirmClick() {
// if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
// Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
// mContext.startActivity(intent);
// } else {
// EasyPermissions.requestPermissions(mContext, "应用需要获相册授权",
// ConstantUtil.READ_EXTERNAL_STORAGE
// , Manifest.permission.READ_EXTERNAL_STORAGE);
// }
// }
// });
// }
// }
}
public Dialog dialog = null;
// 弹出一个确认对话框 并可以设置取消按钮事件
public void showDialogtext(Drawable imgRes,boolean isIconShow, boolean isTextShow, String title,
String content, String okText, String cancelText,
final OnDialogClick click) {
View view = getLayoutInflater().inflate(R.layout.public_dialog_index_permis, null);
ImageView imgIcon = view.findViewById(R.id.img_dialog_icon);
TextView tvOther = view.findViewById(R.id.tv_click);
TextView tvLeft = view.findViewById(R.id.btnLeft);
if(isIconShow){
imgIcon.setVisibility(View.VISIBLE);
if(imgRes != null ){
imgIcon.setImageDrawable(imgRes);
}
}else{
imgIcon.setVisibility(View.GONE);
}
if(isTextShow){
tvOther.setVisibility(View.VISIBLE);
}else{
tvOther.setVisibility(View.GONE);
}
setTextView(R.id.tv_title, title, view);
setTextView(R.id.tv_content, content, view);
// ((EditText) view.findViewById(R.id.txtContent)).setText(cancelText);
if (!TextUtils.isEmpty(okText) && !TextUtils.isEmpty(cancelText)) {
((TextView) view.findViewById(R.id.btnLeft)).setText(okText);
((TextView) view.findViewById(R.id.btnRight)).setText(cancelText);
}
view.findViewById(R.id.btnLeft).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (dialog != null && dialog.isShowing())
dialog.dismiss();
if (click != null)
click.onCancelClick();
}
});
view.findViewById(R.id.btnRight).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (dialog != null && dialog.isShowing())
dialog.dismiss();
if (click != null)
click.onConfirmClick();
}
});
if(!TextUtils.isEmpty(cancelText)){
tvLeft.setVisibility(View.VISIBLE);
}else{
tvLeft.setVisibility(View.GONE);
}
AlertDialog.Builder builder = null;//new AlertDialog.Builder(this, android.R.style.Theme_Holo_Dialog);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
builder = new AlertDialog.Builder(mContext, AlertDialog.THEME_HOLO_LIGHT);
} else {
builder = new AlertDialog.Builder(mContext);
}
builder.setInverseBackgroundForced(true);
builder.setView(view);
dialog = builder.show();
dialog.setCanceledOnTouchOutside(false);
try {
((View) dialog.getWindow().getDecorView().findViewById(R.id.contentDialog).getParent().getParent()).setBackgroundColor(getResources().getColor(R.color.transparent));
} catch (Exception e) {
}
}
/**
* 强制登出,并且拦截返回键
* @param imgRes
* @param isIconShow
* @param isTextShow
* @param title
* @param content
* @param okText
* @param cancelText
* @param click
* @param interceptBackKey
*/
public void showDialogtextInterBackKey(Drawable imgRes, boolean isIconShow, boolean isTextShow, String title,
String content, String okText, String cancelText,
final OnDialogClick click, boolean interceptBackKey) {
View view = getLayoutInflater().inflate(R.layout.public_dialog_index_permis, null);
ImageView imgIcon = view.findViewById(R.id.img_dialog_icon);
TextView tvOther = view.findViewById(R.id.tv_click);
TextView tvLeft = view.findViewById(R.id.btnLeft);
if (isIconShow) {
imgIcon.setVisibility(View.VISIBLE);
if (imgRes != null) {
imgIcon.setImageDrawable(imgRes);
}
} else {
imgIcon.setVisibility(View.GONE);
}
tvOther.setVisibility(isTextShow ? View.VISIBLE : View.GONE);
setTextView(R.id.tv_title, title, view);
setTextView(R.id.tv_content, content, view);
if (!TextUtils.isEmpty(okText) && !TextUtils.isEmpty(cancelText)) {
((TextView) view.findViewById(R.id.btnLeft)).setText(okText);
((TextView) view.findViewById(R.id.btnRight)).setText(cancelText);
}
view.findViewById(R.id.btnLeft).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (dialog != null && dialog.isShowing())
dialog.dismiss();
if (click != null)
click.onCancelClick();
}
});
view.findViewById(R.id.btnRight).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (dialog != null && dialog.isShowing())
dialog.dismiss();
if (click != null)
click.onConfirmClick();
}
});
tvLeft.setVisibility(TextUtils.isEmpty(cancelText) ? View.GONE : View.VISIBLE);
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
builder = new AlertDialog.Builder(mContext, AlertDialog.THEME_HOLO_LIGHT);
} else {
builder = new AlertDialog.Builder(mContext);
}
builder.setInverseBackgroundForced(true);
builder.setView(view);
dialog = builder.show();
dialog.setCanceledOnTouchOutside(false);
// 🔒 返回键拦截逻辑
if (interceptBackKey) {
dialog.setCancelable(false);
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) {
return keyCode == KeyEvent.KEYCODE_BACK;
}
});
}
try {
((View) dialog.getWindow().getDecorView()
.findViewById(R.id.contentDialog)
.getParent().getParent())
.setBackgroundColor(getResources().getColor(R.color.transparent));
} catch (Exception e) {
// 安全兜底
}
}
public void showPermissionDialog(Drawable imgRes,boolean isIconShow, String title,
String content) {
View view = getLayoutInflater().inflate(R.layout.permisson_top_dialog, null);
ImageView imgIcon = view.findViewById(R.id.img_permission_icon);
TextView tvTitle = view.findViewById(R.id.tv_permission_title);
TextView tvContent = view.findViewById(R.id.tv_permission_content);
tvTitle.setText(title);
tvContent.setText(content);
if(isIconShow){
imgIcon.setVisibility(View.VISIBLE);
if(imgRes != null ){
imgIcon.setImageDrawable(imgRes);
}
}else{
imgIcon.setVisibility(View.GONE);
}
AlertDialog.Builder builder = null;//new AlertDialog.Builder(this, android.R.style.Theme_Holo_Dialog);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
builder = new AlertDialog.Builder(mContext, AlertDialog.THEME_HOLO_LIGHT);
} else {
builder = new AlertDialog.Builder(mContext);
}
builder.setInverseBackgroundForced(true);
builder.setView(view);
dialog = builder.create();
// 获取 dialog 的 Window 对象
Window window = dialog.getWindow();
if (window != null) {
// 设置 dialog 在屏幕顶部显示
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.TOP; // 设置对话框顶部显示
window.setAttributes(params);
}
// 显示 AlertDialog
dialog.show();
// dialog = builder.show();
try {
((View) dialog.getWindow().getDecorView().findViewById(R.id.contentDialog).getParent().getParent()).setBackgroundColor(getResources().getColor(R.color.transparent));
} catch (Exception e) {
}
}
/**
* 设置指定TextView的文本
*
* @param id
* @param value textView的值
*/
public void setTextView(int id, String value, View view) {
try {
if (!TextUtils.isEmpty(value)) {
value = value.replaceAll("null", "");
((TextView) view.findViewById(id)).setText(value);
((TextView) view.findViewById(id)).setVisibility(View.VISIBLE);
} else {
((TextView) view.findViewById(id)).setText("");
((TextView) view.findViewById(id)).setVisibility(View.GONE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public interface OnDialogClick {
public void onCancelClick();
public void onConfirmClick();
}
/**
* 初始化参数
* @param bundle 需要初始化的参数
*/
protected void initArgs(Bundle bundle) {
}
/**
* 初始化控件
*/
protected void initWidget(View root) {
}
/**
* 初始化views
*
* @param state
*/
public abstract void initData(Bundle state);
public abstract P createPresenter();
@Override
public void onDestroy() {
EventBus.getDefault().unregister(this);
if (mPresenter != null) {
mPresenter.onDestroy();//释放资源
}
this.mPresenter = null;
hideDialogLoading();
// 重置弹窗状态让其他Fragment可以显示弹窗
isDialogShown.set(false);
super.onDestroy();
}
@Override public void onDestroyView() {
super.onDestroyView();
//此处try catch 是因为unbinder.unbind() 在清空状态下,会造成崩溃
//其他处不影响使用
try {
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onDetach() {
super.onDetach();
this.activity = null;
}
@Override
public void showLoading() {
loadingDialog.show();
}
@Override
public void hideLoading() {
loadingDialog.dismiss();
}
@Override
public void showMessage(String message) {
}
@Override
public void handleError(Exception e) {
hideLoading();
showMessage(e.getMessage());
e.printStackTrace();
}
/**
* 跳转
*
* @param data 携带数据
*/
protected void goTo(Context from, Class<? extends BaseActivity> to, Bundle data) {
Intent i = new Intent();
i.setClass(from, to);
if(data!=null) i.putExtras(data);
from.startActivity(i);
}
/**
* 跳转返回
*
*
*/
protected void goToForResult(Context from, Class<? extends BaseActivity> to, int questCode, Bundle data) {
Intent i = new Intent();
i.setClass(from, to);
if(data!=null) i.putExtras(data);
startActivityForResult(i,questCode);
}
/***
* 关闭等待页面
*/
public void hideDialogLoading() {
LoadingDialog dialog = mLoadingDialog;
try {
if (dialog != null && mContext != null) {
mLoadingDialog = null;
dialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void hidePermissionDialog(){
if(dialog != null && dialog.isShowing()){
dialog.dismiss();
}
}
public void clearLoginInfo(){
AppConfig.USER_LOGIN = false;
SharePreUtil.putString(ConstantUtil.SHARE_PRE_NAME,mContext,ConstantUtil.USER_INFO_PHONE_NUMBER,"");
SharePreUtil.putString(ConstantUtil.SHARE_PRE_NAME,mContext,ConstantUtil.USER_UPLOAD_COMPANY_NAME,"未登录");
}
/**
* 处理登录丢失的统一方法
* 子类可以直接调用此方法来处理401错误
*/
protected void handleLoginLost() {
Log.d("DINGDING", "BaseFragment.handleLoginLost() 被调用");
// 检查Fragment状态
if (isDetached() || isRemoving()) {
Log.d("DINGDING", "Fragment正在销毁跳过处理");
return;
}
// 检查Activity状态
if (mContext == null || mContext.isFinishing() || mContext.isDestroyed()) {
Log.d("DINGDING", "Fragment所属Activity正在销毁跳过处理");
return;
}
// 重置登录信息
resetLoginInfo();
// 显示401弹窗
show401Dialog();
}
/**
* 重置登录信息
*/
private void resetLoginInfo() {
AppConfig.USER_LOGIN = false;
AppConfig.MEMBER_ID = 0;
AppConfig.USER_TOKEN = "";
AppConfig.USER_ID = "";
SharePreUtil.putBoolean(ConstantUtil.SHARE_PRE_NAME, mContext, ConstantUtil.USER_LOGIN, AppConfig.USER_LOGIN);
Log.d("DINGDING", "登录信息已重置");
}
/**
* 显示401弹窗
*/
private void show401Dialog() {
if (mContext == null || mContext.isFinishing() || mContext.isDestroyed()) {
Log.d("DINGDING", "Activity状态异常无法显示弹窗");
return;
}
mContext.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
// 再次检查状态
if (isDetached() || isRemoving() || mContext == null || mContext.isFinishing() || mContext.isDestroyed()) {
Log.d("DINGDING", "Fragment或Activity已销毁取消弹窗");
return;
}
showDialogtextInterBackKey(null, false, false,
"提示",
"检测到您的账号在异地登录。若非本人操作,请立即修改密码并检查账号安全!",
"我知道了", "",
new OnDialogClick() {
@Override
public void onCancelClick() {
Log.d("DINGDING", "用户点击取消");
}
@Override
public void onConfirmClick() {
Log.d("DINGDING", "用户点击确定");
ActivityManager.removeAllActivityExceptMain();
goTo(mContext, LoginActivity.class, null);
}
}, true);
Log.d("DINGDING", "BaseFragment 401弹窗显示成功");
} catch (Exception e) {
Log.e("DINGDING", "BaseFragment 401弹窗显示失败", e);
}
}
});
}
/**
* 权限请求结果回调
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 将权限结果传递给EasyPermissions处理
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
/**
* 权限被授予时的回调
*/
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
// 这个方法会在子Fragment中重写这里可以留空或者提供默认实现
}
/**
* 权限被拒绝时的回调
*/
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
// 这个方法会在子Fragment中重写这里可以留空或者提供默认实现
}
}