From f5aa8ec8f1c8b42b4f3556954608915d03876b76 Mon Sep 17 00:00:00 2001 From: eggmanQQQ <3671373519@qq.com> Date: Wed, 13 Nov 2024 15:45:38 +0800 Subject: [PATCH] fix: bug fix --- .../java/com/chwl/app/base/BaseFragment.java | 64 +++++++++++------ .../chwl/app/base/BaseViewBindingFragment.kt | 5 +- .../common/widget/dialog/DialogManager.java | 16 +++-- .../ui/user/activity/UserInfoActivity.java | 71 ++++++++++--------- .../webview/baishun/BaiShunGameWebFragment.kt | 48 ++++++------- .../baishun/LeaderccGameWebFragment.kt | 56 +++++++-------- .../session/actions/PickImageActionNew.kt | 62 ++++++++-------- 7 files changed, 179 insertions(+), 143 deletions(-) diff --git a/app/src/main/java/com/chwl/app/base/BaseFragment.java b/app/src/main/java/com/chwl/app/base/BaseFragment.java index be9fdbafa..bac07a7df 100644 --- a/app/src/main/java/com/chwl/app/base/BaseFragment.java +++ b/app/src/main/java/com/chwl/app/base/BaseFragment.java @@ -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() { diff --git a/app/src/main/java/com/chwl/app/base/BaseViewBindingFragment.kt b/app/src/main/java/com/chwl/app/base/BaseViewBindingFragment.kt index ad603a048..d6f01bd94 100644 --- a/app/src/main/java/com/chwl/app/base/BaseViewBindingFragment.kt +++ b/app/src/main/java/com/chwl/app/base/BaseViewBindingFragment.kt @@ -10,8 +10,11 @@ import java.lang.reflect.ParameterizedType abstract class BaseViewBindingFragment : 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? { //反射没有想象中的那么耗时 diff --git a/app/src/main/java/com/chwl/app/common/widget/dialog/DialogManager.java b/app/src/main/java/com/chwl/app/common/widget/dialog/DialogManager.java index 60e2e3498..49fb7ea7a 100644 --- a/app/src/main/java/com/chwl/app/common/widget/dialog/DialogManager.java +++ b/app/src/main/java/com/chwl/app/common/widget/dialog/DialogManager.java @@ -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); } } diff --git a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java index 45f03bb07..2f6d9d0fc 100644 --- a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java +++ b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java @@ -405,7 +405,7 @@ public class UserInfoActivity extends BaseBindingActivity 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); diff --git a/app/src/main/java/com/chwl/app/ui/webview/baishun/BaiShunGameWebFragment.kt b/app/src/main/java/com/chwl/app/ui/webview/baishun/BaiShunGameWebFragment.kt index 542216c44..7e6a3fddc 100644 --- a/app/src/main/java/com/chwl/app/ui/webview/baishun/BaiShunGameWebFragment.kt +++ b/app/src/main/java/com/chwl/app/ui/webview/baishun/BaiShunGameWebFragment.kt @@ -64,8 +64,8 @@ class BaiShunGameWebFragment : BaseViewBindingFragment( } 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( @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( 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( } } //设置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( 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( getString(R.string.exit_text), false, false, true, object : OkCancelDialogListener { override fun onOk() { - binding.webView.reload() + getViewBinding()?.webView?.reload() } override fun onCancel() { diff --git a/app/src/main/java/com/chwl/app/ui/webview/baishun/LeaderccGameWebFragment.kt b/app/src/main/java/com/chwl/app/ui/webview/baishun/LeaderccGameWebFragment.kt index 0ddf8bf44..c03377859 100644 --- a/app/src/main/java/com/chwl/app/ui/webview/baishun/LeaderccGameWebFragment.kt +++ b/app/src/main/java/com/chwl/app/ui/webview/baishun/LeaderccGameWebFragment.kt @@ -69,8 +69,8 @@ class LeaderccGameWebFragment : BaseViewBindingFragment } 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 @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 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 } } //设置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 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 getString(R.string.exit_text), false, false, true, object : OkCancelDialogListener { override fun onOk() { - binding.webView.reload() + getViewBinding()?.webView?.reload() } override fun onCancel() { diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt index a0c9a6990..dbbdac056 100644 --- a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt @@ -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) { -// 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) { + // 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) } } }