fix: bug fix

This commit is contained in:
eggmanQQQ
2024-11-13 15:45:38 +08:00
parent 245dee330e
commit f5aa8ec8f1
7 changed files with 179 additions and 143 deletions

View File

@@ -15,11 +15,9 @@ import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.core.util.Consumer;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.chwl.app.R;
import com.chwl.app.application.App;
import com.chwl.app.common.AbsStatusFragment;
import com.chwl.app.common.LoadingFragment;
import com.chwl.app.common.NetworkErrorFragment;
@@ -67,6 +65,9 @@ public abstract class BaseFragment extends RxFragment implements KeyEvent.Callba
super.onCreate(savedInstanceState);
mContext = getContext();
onInitArguments(getArguments());
// if (getContext() != null) {
// dialogManager = new DialogManager(getContext());
// }
}
@Override
@@ -588,30 +589,47 @@ public abstract class BaseFragment extends RxFragment implements KeyEvent.Callba
//todo do fix
protected DialogManager getDialogManager() {
FragmentActivity activity = getActivity();
try {
if (activity instanceof BaseMvpActivity) {
return ((BaseMvpActivity) activity).getDialogManager();
} else if (activity instanceof BaseActivity) {
return ((BaseActivity) activity).getDialogManager();
}
Activity topActivity = App.gStack.getTopActivity();
if (dialogManager == null && topActivity != null) {
dialogManager = new DialogManager(topActivity);
}
Context fragmentContext = requireContext();
if (dialogManager == null) {
dialogManager = new DialogManager(fragmentContext);
}
} catch (Exception e) {
e.printStackTrace();
if (dialogManager != null) {
return dialogManager;
} else {
dialogManager = new DialogManager(true);
return dialogManager;
}
return dialogManager;
// FragmentActivity activity = getActivity();
// try {
// if (activity instanceof BaseMvpActivity) {
// DialogManager dialogManager1 = ((BaseMvpActivity) activity).getDialogManager();
// if (dialogManager1 != null) {
// dialogManager = dialogManager1;
// }
// return dialogManager1;
// } else if (activity instanceof BaseActivity) {
// DialogManager dialogManager2 = ((BaseActivity) activity).getDialogManager();
// if (dialogManager2 != null) {
// dialogManager = dialogManager2;
// }
// return dialogManager2;
// }
//
// Context fragmentContext = getContext();
// if (dialogManager == null && fragmentContext != null) {
// dialogManager = new DialogManager(fragmentContext);
// }
//
// if (dialogManager == null) {
// Activity topActivity = App.gStack.getTopActivity();
// if (topActivity != null) {
// dialogManager = new DialogManager(topActivity);
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// dialogManager = new DialogManager(true);
// }
//
// return dialogManager;
}
public BaseActivity getBaseActivity() {

View File

@@ -10,8 +10,11 @@ import java.lang.reflect.ParameterizedType
abstract class BaseViewBindingFragment<T : ViewBinding> : BaseFragment() {
protected var _binding: T? = null
//todo do fix
val binding get() = _binding!!
fun getViewBinding():T?{
return _binding
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
//反射没有想象中的那么耗时

View File

@@ -54,6 +54,7 @@ public class DialogManager {
private Switch switchTips;
private int mProgressMax = 0;
private String mTip;
private boolean isError;
public DialogManager(Context context) {
mContext = context;
@@ -77,6 +78,10 @@ public class DialogManager {
mCanceledOnClickOutside = canceledOnClickOutside;
}
public DialogManager(boolean isError) {
this.isError = isError;
}
public static boolean isHtmlAlertDialog(String html) {
try {
return html.matches(".*<([^>]*)>.*");
@@ -363,7 +368,9 @@ public class DialogManager {
mDialog.dismiss();
}
} else {
mDialog.dismiss();
if (mDialog != null) {
mDialog.dismiss();
}
}
}
} catch (Exception e) {
@@ -396,8 +403,7 @@ public class DialogManager {
}
public void showOkWithTitleDialog(CharSequence message, boolean isCanCancel) {
showOkWithTitleDialog(getContext().getString(R.string.common_tip), message,
getContext().getString(R.string.text_ok), isCanCancel, null);
showOkWithTitleDialog(getContext().getString(R.string.common_tip), message, getContext().getString(R.string.text_ok), isCanCancel, null);
}
public void showOkWithTitleDialog(CharSequence message) {
@@ -529,7 +535,7 @@ public class DialogManager {
}
public int getShowingDialogId() {
if (mDialog.isShowing() && mDialog instanceof CommonPopupDialog) {
if (mDialog != null && mDialog.isShowing() && mDialog instanceof CommonPopupDialog) {
return ((CommonPopupDialog) mDialog).getId();
}
return 0;
@@ -978,7 +984,7 @@ public class DialogManager {
public void showProgressDialog(Context context, String msg, boolean cancelable, boolean outSideCancelable,
DialogInterface.OnDismissListener listener, DialogInterface.OnCancelListener cancelListener) {
showProgressDialog(context, msg, cancelable, outSideCancelable, listener);
if (cancelListener != null) {
if (cancelListener != null && mDialog != null) {
mDialog.setOnCancelListener(cancelListener);
}
}

View File

@@ -405,7 +405,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
UserDetailInfo.DataBean.RelationUserVO cpInfo = dataBean.getRelationUserVO();
//头像
if (cpInfo!= null && cpInfo.cpAvatar != null && !cpInfo.cpAvatar.isEmpty() && cpInfo.showCpAvatar){
if (cpInfo != null && cpInfo.cpAvatar != null && !cpInfo.cpAvatar.isEmpty() && cpInfo.showCpAvatar){
//cp 头像
mBinding.cpViews.setVisibility(View.VISIBLE);
mBinding.ivHeadWear.loadFile(CpUtils.INSTANCE.getHeadSvga(cpInfo.cpLevel));
@@ -419,45 +419,50 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
}else {
mBinding.cpViews.setVisibility(View.INVISIBLE);
//正常头像
HeadWearInfo headWearInfo = userInfo.getUserHeadwear();
if (headWearInfo != null && headWearInfo.getFirstUrl() != null) {
AvatarHelper.loadAvatarFrame(mBinding.ivHeadWear, headWearInfo.getFirstUrl(), headWearInfo.getType());
mBinding.ivUserHead.setPadding(0, 0, 0, 0);
mBinding.ivHeadWear.setVisibility(View.VISIBLE);
} else {
int padding = getResources().getDimensionPixelOffset(R.dimen.dp_0_5);
mBinding.ivUserHead.setPadding(padding, padding, padding, padding);
mBinding.cpViews.setVisibility(View.INVISIBLE);
mBinding.ivHeadWear.setVisibility(View.INVISIBLE);
if (userInfo != null) {
//正常头像
HeadWearInfo headWearInfo = userInfo.getUserHeadwear();
if (headWearInfo != null && headWearInfo.getFirstUrl() != null) {
AvatarHelper.loadAvatarFrame(mBinding.ivHeadWear, headWearInfo.getFirstUrl(), headWearInfo.getType());
mBinding.ivUserHead.setPadding(0, 0, 0, 0);
mBinding.ivHeadWear.setVisibility(View.VISIBLE);
} else {
int padding = getResources().getDimensionPixelOffset(R.dimen.dp_0_5);
mBinding.ivUserHead.setPadding(padding, padding, padding, padding);
mBinding.cpViews.setVisibility(View.INVISIBLE);
mBinding.ivHeadWear.setVisibility(View.INVISIBLE);
}
}
}
//cp 卡片
if (cpInfo!= null && cpInfo.cpAvatar != null && !cpInfo.cpAvatar.isEmpty()) {
mBinding.cpCardDay.setText(cpInfo.cpDay + ""+ ResUtil.getString(R.string.days));
mBinding.cpCardDay.setVisibility(cpInfo.cpDay > 0? View.VISIBLE : View.INVISIBLE);
if (userInfo != null) {
//cp 卡片
if (cpInfo!= null && cpInfo.cpAvatar != null && !cpInfo.cpAvatar.isEmpty()) {
mBinding.cpCardDay.setText(cpInfo.cpDay + ""+ ResUtil.getString(R.string.days));
mBinding.cpCardDay.setVisibility(cpInfo.cpDay > 0? View.VISIBLE : View.INVISIBLE);
mBinding.cpCardLevel.setImageResource(CpUtils.INSTANCE.getLevelImg(cpInfo.cpLevel));
mBinding.cpCardLevel.setVisibility(View.VISIBLE);
mBinding.cpCardLevelEmpty.setVisibility(View.INVISIBLE);
mBinding.cpCardLevel.setImageResource(CpUtils.INSTANCE.getLevelImg(cpInfo.cpLevel));
mBinding.cpCardLevel.setVisibility(View.VISIBLE);
mBinding.cpCardLevelEmpty.setVisibility(View.INVISIBLE);
ImageLoadUtils.loadAvatar(userInfo.getAvatar(),mBinding.cpCardUserAvatar);
ImageLoadUtils.loadAvatar(cpInfo.cpAvatar,mBinding.cpCardUserAvatarCp);
mBinding.cpCardUserHeadCp.setVisibility(View.VISIBLE);
mBinding.cpCardUserAvatarCp.setOnClickListener(v -> {
UserInfoActivity.Companion.start(context,cpInfo.cpUid);
});
}else {
mBinding.cpCardDay.setVisibility(View.INVISIBLE);
mBinding.cpCardLevelEmpty.setVisibility(View.VISIBLE);
mBinding.cpCardLevel.setVisibility(View.INVISIBLE);
mBinding.cpCardUserAvatarCp.setImageResource(R.drawable.ic_user_info_cp_def_avatar);
mBinding.cpCardUserAvatarCp.setOnClickListener(null);
mBinding.cpCardUserHeadCp.setVisibility(View.INVISIBLE);
ImageLoadUtils.loadAvatar(userInfo.getAvatar(), mBinding.cpCardUserAvatar);
ImageLoadUtils.loadAvatar(userInfo.getAvatar(),mBinding.cpCardUserAvatar);
ImageLoadUtils.loadAvatar(cpInfo.cpAvatar,mBinding.cpCardUserAvatarCp);
mBinding.cpCardUserHeadCp.setVisibility(View.VISIBLE);
mBinding.cpCardUserAvatarCp.setOnClickListener(v -> {
UserInfoActivity.Companion.start(context,cpInfo.cpUid);
});
}else {
mBinding.cpCardDay.setVisibility(View.INVISIBLE);
mBinding.cpCardLevelEmpty.setVisibility(View.VISIBLE);
mBinding.cpCardLevel.setVisibility(View.INVISIBLE);
mBinding.cpCardUserAvatarCp.setImageResource(R.drawable.ic_user_info_cp_def_avatar);
mBinding.cpCardUserAvatarCp.setOnClickListener(null);
mBinding.cpCardUserHeadCp.setVisibility(View.INVISIBLE);
ImageLoadUtils.loadAvatar(userInfo.getAvatar(), mBinding.cpCardUserAvatar);
}
}
//cp 动画
if (cpInfo != null && cpInfo.showCpAnim && isFirst) {
String animUrl = CpUtils.INSTANCE.getUserInfoAnim(cpInfo.cpLevel);

View File

@@ -64,8 +64,8 @@ class BaiShunGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(
}
gameUrl = url
initView()
binding.webView.isInvisible = true
binding.webView.loadUrl(url)
getViewBinding()?.webView?.isInvisible = true
getViewBinding()?.webView?.loadUrl(url)
}
private fun initView() {
@@ -75,7 +75,7 @@ class BaiShunGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(
@SuppressLint("SetJavaScriptEnabled", "JavascriptInterface")
private fun initWebView() {
//防⽌⽤浏览器打开⽹⻚
binding.webView.webViewClient = object : WebViewClient() {
getViewBinding()?.webView?.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
@@ -114,7 +114,7 @@ class BaiShunGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(
super.onPageFinished(view, url)
try {
if (!isLoadError) {
binding?.webView?.isVisible = true
getViewBinding()?.webView?.isVisible = true
}
}catch (e:Exception){
@@ -143,46 +143,46 @@ class BaiShunGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(
}
}
//设置webview背景透明,默认为⽩⾊
binding.webView.setBackgroundColor(0)
getViewBinding()?.webView?.setBackgroundColor(0)
//设置view背景透明默认为⽩⾊ 可选(单独activity添加webView组件时需要添加)
binding.root.setBackgroundColor(0)
getViewBinding()?.root?.setBackgroundColor(0)
val settings = binding.webView.settings
val settings = getViewBinding()?.webView?.settings
//设置⽀持Javascript
settings.javaScriptEnabled = true
settings?.javaScriptEnabled = true
//设置默认⽂本编码
settings.defaultTextEncodingName = "UTF-8"
settings?.defaultTextEncodingName = "UTF-8"
//设置可访问本地⽂件
settings.allowFileAccess = true
settings?.allowFileAccess = true
//设置允许通过file url加载的Javascript读取全部资源(包括⽂件,http,https)
settings.allowUniversalAccessFromFileURLs = true
settings?.allowUniversalAccessFromFileURLs = true
//设置优先加载缓存
settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
settings?.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
//设置启⽤HTML5 DOM storage
settings.domStorageEnabled = true
settings?.domStorageEnabled = true
//设置开启数据库缓存
settings.databaseEnabled = true
settings.databasePath = (requireContext().applicationContext.filesDir.absolutePath)
settings?.databaseEnabled = true
settings?.databasePath = (requireContext().applicationContext.filesDir.absolutePath)
//设置⽀持缩放
settings.setSupportZoom(true)
settings?.setSupportZoom(true)
//设置⾃适应
settings.useWideViewPort = true
settings?.useWideViewPort = true
//设置⾃动播放媒体
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
settings.mediaPlaybackRequiresUserGesture = false
settings?.mediaPlaybackRequiresUserGesture = false
}
//设置5.0以上允许加载http和https混合的⻚⾯
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
settings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
}
//游戏调⽤的类,必须定义为 NativeBridge
binding.webView.addJavascriptInterface(BaiShunGameJSBridge(this), "NativeBridge")
getViewBinding()?.webView?.addJavascriptInterface(BaiShunGameJSBridge(this), "NativeBridge")
}
override fun callJs(str: String) {
binding.webView.post {
binding.webView.loadUrl("javascript:$str")
getViewBinding()?.webView?.post {
getViewBinding()?.webView?.loadUrl("javascript:$str")
}
}
@@ -238,7 +238,7 @@ class BaiShunGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(
private fun onReceivedError(url: String?, code: Int?, message: CharSequence?) {
if (url == gameUrl) {
binding.webView.isInvisible = true
getViewBinding()?.webView?.isInvisible = true
dialogManager.dismissDialog()
showLoadErrorDialog(message?.toString() ?: "($code)")
}
@@ -252,7 +252,7 @@ class BaiShunGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(
getString(R.string.exit_text),
false, false, true, object : OkCancelDialogListener {
override fun onOk() {
binding.webView.reload()
getViewBinding()?.webView?.reload()
}
override fun onCancel() {

View File

@@ -69,8 +69,8 @@ class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>
}
gameUrl = url
initView()
binding.webView.isInvisible = true
binding.webView.loadUrl(url)
getViewBinding()?.webView?.isInvisible = true
getViewBinding()?.webView?.loadUrl(url)
}
private fun initView() {
@@ -80,7 +80,7 @@ class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>
@SuppressLint("SetJavaScriptEnabled", "JavascriptInterface")
private fun initWebView() {
//防⽌⽤浏览器打开⽹⻚
binding.webView.webViewClient = object : WebViewClient() {
getViewBinding()?.webView?.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
@@ -118,7 +118,7 @@ class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
if (!isLoadError) {
binding?.webView?.isVisible = true
getViewBinding()?.webView?.isVisible = true
}
}
@@ -143,58 +143,58 @@ class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>
}
}
//设置webview背景透明,默认为⽩⾊
binding.webView.setBackgroundColor(0)
getViewBinding()?.webView?.setBackgroundColor(0)
//设置view背景透明默认为⽩⾊ 可选(单独activity添加webView组件时需要添加)
binding.root.setBackgroundColor(0)
getViewBinding()?.root?.setBackgroundColor(0)
val settings = binding.webView.settings
val settings = getViewBinding()?.webView?.settings
//设置⽀持Javascript
settings.javaScriptEnabled = true
settings?.javaScriptEnabled = true
//设置默认⽂本编码
settings.defaultTextEncodingName = "UTF-8"
settings?.defaultTextEncodingName = "UTF-8"
//设置可访问本地⽂件
settings.allowFileAccess = true
settings?.allowFileAccess = true
//设置允许通过file url加载的Javascript读取全部资源(包括⽂件,http,https)
settings.allowUniversalAccessFromFileURLs = true
settings?.allowUniversalAccessFromFileURLs = true
//设置优先加载缓存
settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
settings?.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
//设置启⽤HTML5 DOM storage
settings.domStorageEnabled = true
settings?.domStorageEnabled = true
//设置开启数据库缓存
settings.databaseEnabled = true
settings.databasePath = (requireContext().applicationContext.filesDir.absolutePath)
settings?.databaseEnabled = true
settings?.databasePath = (requireContext().applicationContext.filesDir.absolutePath)
//设置⽀持缩放
settings.setSupportZoom(true)
settings?.setSupportZoom(true)
//设置⾃适应
settings.useWideViewPort = true
settings?.useWideViewPort = true
//设置⾃动播放媒体
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
settings.mediaPlaybackRequiresUserGesture = false
settings?.mediaPlaybackRequiresUserGesture = false
}
//设置5.0以上允许加载http和https混合的⻚⾯
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
settings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
}
//游戏调⽤的类,必须定义为 LingxianAndroid
leaderccJSBridge = LeaderccJSBridge(this)
binding.webView.addJavascriptInterface(leaderccJSBridge!!, "LingxianAndroid")
getViewBinding()?.webView?.addJavascriptInterface(leaderccJSBridge!!, "LingxianAndroid")
if (gameConfig?.showType == 2){
binding.webView.post {
binding.bg.setVis(true)
binding.bg.click {
getViewBinding()?.webView?.post {
getViewBinding()?.bg?.setVis(true)
getViewBinding()?.bg?.click {
leaderccJSBridge?.closeGame()
}
}
}
binding.webView.postDelayed({ dialogManager?.dismissDialog() }, 2000)
getViewBinding()?.webView?.postDelayed({ dialogManager?.dismissDialog() }, 2000)
}
override fun callJs(str: String) {
binding.webView.post {
binding.webView.loadUrl("javascript:$str")
getViewBinding()?.webView?.post {
getViewBinding()?.webView?.loadUrl("javascript:$str")
}
}
@@ -256,7 +256,7 @@ class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>
private fun onReceivedError(url: String?, code: Int?, message: CharSequence?) {
if (url == gameUrl) {
binding.webView.isInvisible = true
getViewBinding()?.webView?.isInvisible = true
dialogManager.dismissDialog()
showLoadErrorDialog(message?.toString() ?: "($code)")
}
@@ -270,7 +270,7 @@ class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>
getString(R.string.exit_text),
false, false, true, object : OkCancelDialogListener {
override fun onOk() {
binding.webView.reload()
getViewBinding()?.webView?.reload()
}
override fun onCancel() {

View File

@@ -42,41 +42,45 @@ abstract class PickImageActionNew protected constructor(
if (resultCode == BaseDialogFragment.RESULT_OK) {
when (requestCode) {
NimPhotoPickActivity.PICK_ACT_RESULT and 0xff -> {
if (data == null) return
val uri = data.data
if (uri != null) {
val file = copyFile(activity, uri)
if (file == null) {
file?.path?.let { path ->
val paths = mutableListOf(path)
PhotoCompressUtil.compress(BaseApp.getContext(),
paths,
PhotoCompressUtil.getCompressCachePath(),
object : PhotosCompressCallback {
override fun onSuccess(compressedImgList: ArrayList<String>) {
// sendImageAfterSelfImagePicker(compressedImgList)
for (path in compressedImgList) {
val file = File(path)
if (TextUtils.isEmpty(path) || !file.exists()) {
SingleToastUtil.showToastShort(
path + ResUtil.getString(
R.string.xchat_android_core_file_filemodel_01
try {
if (data == null) return
val uri = data.data
if (uri != null) {
val file = copyFile(activity, uri)
if (file == null) {
file?.path?.let { path ->
val paths = mutableListOf(path)
PhotoCompressUtil.compress(BaseApp.getContext(),
paths,
PhotoCompressUtil.getCompressCachePath(),
object : PhotosCompressCallback {
override fun onSuccess(compressedImgList: ArrayList<String>) {
// sendImageAfterSelfImagePicker(compressedImgList)
for (path in compressedImgList) {
val file = File(path)
if (TextUtils.isEmpty(path) || !file.exists()) {
SingleToastUtil.showToastShort(
path + ResUtil.getString(
R.string.xchat_android_core_file_filemodel_01
)
)
)
return
return
}
onPicked(file)
}
onPicked(file)
}
}
override fun onFail(e: Throwable) {
SingleToastUtil.showToastShort(R.string.picker_image_error)
}
})
override fun onFail(e: Throwable) {
SingleToastUtil.showToastShort(R.string.picker_image_error)
}
})
}
} else {
SingleToastUtil.showToastShort(R.string.picker_image_error)
}
} else {
SingleToastUtil.showToastShort(R.string.picker_image_error)
}
} catch (e: Exception) {
SingleToastUtil.showToastShort(R.string.picker_image_error)
}
}
}