feat : 接入新H5 小游戏, 砸蛋换新图 , h5 弹窗打开游戏 逻辑优化

This commit is contained in:
eggmanQQQ
2024-10-23 15:26:27 +08:00
parent 1c0956d4b1
commit 9e590ada9e
36 changed files with 657 additions and 184 deletions

View File

@@ -42,8 +42,10 @@ import com.alibaba.fastjson.JSONObject;
import com.chwl.app.notify.RoomNotifyManager;
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
import com.chwl.app.ui.webview.baishun.LeaderccGameWebFragment;
import com.chwl.app.utils.RoomBoomManager;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.library.language.LanguageHelper;
import com.chwl.library.widget.SVGAView;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.room.game.bean.BaiShunGameConfig;
@@ -233,6 +235,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
private RoomNotifyManager roomNotify;
private BaiShunGameWebFragment baiShunGameFragment;
private LeaderccGameWebFragment leaderccGameFragment;
public static void start(Context context, long roomUid) {
startForFromType(context, roomUid, FROM_TYPE_NORMAL, null, null);
@@ -1503,6 +1506,24 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
getSupportFragmentManager().beginTransaction().add(R.id.layout_baishun_game, baiShunGameFragment).commitAllowingStateLoss();
}
public void showLeaderccGame(String url, BaiShunGameConfig config) {
closeBaiShunGame();
StringBuffer newUrl = new StringBuffer(url);
newUrl.append("&uid="+AuthModel.get().getCurrentUid());
newUrl.append("&token="+config.getCode());
newUrl.append("&lang=").append(LanguageHelper.INSTANCE.getH5GameLeaderccLan());
newUrl.append("&roomid=").append(AvRoomDataManager.get().getRoomId());
leaderccGameFragment = LeaderccGameWebFragment.Companion.newInstance(newUrl.toString(), config);
leaderccGameFragment.setListener(new IBaiShunGameListener() {
@Override
public void onGameClose() {
closeBaiShunGame();
}
});
findViewById(R.id.layout_baishun_game).setVisibility(VISIBLE);
getSupportFragmentManager().beginTransaction().add(R.id.layout_baishun_game, leaderccGameFragment).commitAllowingStateLoss();
}
private boolean closeBaiShunGame() {
boolean isClose = false;
if (baiShunGameFragment != null) {
@@ -1511,8 +1532,15 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
isClose = true;
}
}
if (leaderccGameFragment != null) {
if (leaderccGameFragment.isAdded()) {
getSupportFragmentManager().beginTransaction().remove(leaderccGameFragment).commitAllowingStateLoss();
isClose = true;
}
}
findViewById(R.id.layout_baishun_game).setVisibility(View.GONE);
baiShunGameFragment = null;
leaderccGameFragment = null;
return isClose;
}
}

View File

@@ -11,7 +11,7 @@ class CreateRoomGameAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_room_create_game) {
override fun convert(helper: BaseViewHolder, item: GameInfo) {
helper.getView<ImageView>(R.id.iv_cover).load(item.pic,12f)
helper.getView<ImageView>(R.id.iv_cover).load(item.pic?:"",12f)
helper.itemView.isSelected = item.isSelect
}

View File

@@ -10,7 +10,7 @@ class CreateRoomGameGuideAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_room_create_game_guide) {
override fun convert(helper: BaseViewHolder, item: GameInfo) {
GlideUtils.instance().load(item.pic,R.drawable.default_cover,helper.getView(R.id.iv_cover))
GlideUtils.instance().load(item.pic?:"",R.drawable.default_cover,helper.getView(R.id.iv_cover))
}
}

View File

@@ -11,8 +11,8 @@ import com.chwl.core.room.game.bean.GameInfo
class RoomGameListAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.room_gameplay_item2) {
override fun convert(helper: BaseViewHolder, item: GameInfo?) {
helper.setText(R.id.tv_name, item?.name)
helper.setText(R.id.tv_name, item?.name?:"")
val iconView = helper.getView<ImageView>(R.id.iv_icon)
iconView.load(item?.pic2)
iconView.load(item?.pic2?:"")
}
}

View File

@@ -33,11 +33,15 @@ class CreateGameRoomDialog : BaseDialogFragment<DialogCreateGameRoomBinding>() {
.build()
gameAdapter.setOnItemClickListener { _, _, position ->
dismissAllowingStateLoss()
OpenRoomHelper.openRoom(
requireActivity() as BaseActivity, RoomInfo.ROOMTYPE_GAME,
gameAdapter.data[position].mgId.toLong()
)
try {
dismissAllowingStateLoss()
OpenRoomHelper.openRoom(
requireActivity() as BaseActivity, RoomInfo.ROOMTYPE_GAME,
gameAdapter.data[position].mgId.toLong()
)
}catch (e:Exception){
}
}
binding?.ivClose?.setOnClickListener {

View File

@@ -55,7 +55,7 @@ class RoomGameListDialog :
private var mStatus = -1
private var mGameData = arrayListOf<GameInfo>()
var listener: RoomGameplayDialog.GameplayDialogListener? = null
var listener: GameplayDialogListener? = null
override fun getTheme(): Int {
return R.style.ErbanBottomSheetDialogDimFalse
}
@@ -102,8 +102,10 @@ class RoomGameListDialog :
private fun initView() {
adapter.setOnItemClickListener { _, view, position ->
val item = adapter.getItem(position) as GameInfo
switchGame(item)
val item = adapter.data.getOrNull(position)
if (item != null) {
switchGame(item)
}
}
binding?.recyclerView?.adapter = adapter
}
@@ -176,13 +178,23 @@ class RoomGameListDialog :
private fun roomIconToGameInfo(list : List<RoomIcon>): ArrayList<GameInfo> {
val newData = arrayListOf<GameInfo>()
list.forEachIndexed { index, roomIcon ->
if (roomIcon.isBaiShunGame()) {
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:""))
}else if(roomIcon.isFindLove()){
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
}else if(roomIcon.isLeadercc()){
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
// if (roomIcon.isBaiShunGame()) {
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"",code = roomIcon.code))
// }else if(roomIcon.isFindLove()){
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
// }else if(roomIcon.isLeadercc()){
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
// }
val gameInfo = GameInfo().apply {
name = roomIcon.name ?: ""
pic = roomIcon.icon ?: ""
pic2 = roomIcon.icon ?: ""
skipContent = roomIcon.skipContent ?: ""
ruleValue = roomIcon.ruleValue ?: ""
code = roomIcon.code ?: ""
showType = roomIcon.showType ?: 0
}
newData.add(gameInfo)
}
return newData
}
@@ -251,7 +263,11 @@ class RoomGameListDialog :
getString(R.string.room_switch_game_tips)
) {
if (gameInfo.mgId.isNotEmpty()) {
if (gameInfo.isFindLove()) {
jumpFindLove()
}else if (gameInfo.isLeadercc()) {
jumpLeaderccGame(gameInfo)
} else if (gameInfo.mgId?.isNotEmpty() == true) {
if (gameInfo.isStandardRoom()) {
OpenRoomHelper.updateRoomInfo(
activity as BaseActivity,
@@ -269,18 +285,39 @@ class RoomGameListDialog :
false
)
}
}else if(!gameInfo.skipContent.isNullOrEmpty() || !gameInfo.ruleValue.isNullOrEmpty()){
if (gameInfo.isFindLove()) {
jumpFindLove()
} else {
jumpBaiShunGame(gameInfo)
}
}else {
jumpBaiShunGame(gameInfo)
}
dismissAllowingStateLoss()
}
}
private fun jumpLeaderccGame(data: GameInfo) {
try {
val url = data.skipContent
val ruleValue = Gson().fromJson<RoomIcon.RuleValueBean>(
data.ruleValue,
RoomIcon.RuleValueBean::class.java
)
val config = Gson().fromJson<BaiShunGameConfig>(
ruleValue.RESERVE,
BaiShunGameConfig::class.java
)
if (config != null && url != null) {
config.reloadDynamicParams()
config.showType = data.showType
listener?.onShowLeaderccGame(url, config)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun jumpBaiShunGame(data: GameInfo) {
try {
val url = data.skipContent
@@ -341,5 +378,6 @@ class RoomGameListDialog :
interface GameplayDialogListener {
fun onShowBaiShunGame(url: String, config: BaiShunGameConfig)
fun onShowLeaderccGame(url: String, config: BaiShunGameConfig)
}
}

View File

@@ -837,10 +837,14 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
R.id.iv_game -> {
val dialog = RoomGameListDialog();
dialog.code = hashCode()
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
dialog.listener = object : RoomGameListDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
override fun onShowLeaderccGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showLeaderccGame(url, config)
}
}
dialog.show(childFragmentManager, "GAME_LIST")
}
@@ -1686,7 +1690,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
if (configModel.icon2Url != null) {
ImageLoadUtils.loadAvatar(configModel.icon2Url, btnIvgame)
ImageLoadUtils.loadImage( btnIvgame,configModel.icon2Url)
}
}

View File

@@ -12,8 +12,8 @@ class MeGameAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_me_game) {
override fun convert(helper: BaseViewHolder, item: GameInfo) {
helper.getView<ImageView>(R.id.iv_pic).load(item.pic)
helper.setText(R.id.tv_name, item.name)
helper.getView<ImageView>(R.id.iv_pic).load(item.pic?:"")
helper.setText(R.id.tv_name, item.name?:"")
}
}

View File

@@ -289,9 +289,6 @@ public class RouterHandler {
case RouterType.MY_SET:
UIHelper.showSettingAct(context);
break;
case RouterType.MY_VIP_SET:
VipSetActivity.Companion.start(context);
break;
case RouterType.MY_REVENUE:
EarnRecordActivity.start(context);
break;

View File

@@ -80,6 +80,7 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
binding.tvCommunityNorms.setOnClickListener(this)
binding.rlyClearCache.setOnClickListener(this)
binding.tvNoticeSetting.setOnClickListener(this)
binding.tvVipSetting.setOnClickListener(this)
binding.tvShieldManager.setOnClickListener(this)
binding.rlyPermission.setOnClickListener(this)
binding.tvLanugage.setOnClickListener(this)
@@ -174,7 +175,7 @@ class SettingActivity : BaseViewBindingActivity<ActivitySettingBinding>(), View.
clearCache()
}
})
R.id.tv_vip_setting -> VipSetActivity.start(context);
R.id.tv_notice_setting -> NoticeSettingActivity.start(context)
R.id.tv_shield_manager -> ShieldManageActivity.start(context)
R.id.rly_permission -> PermissionGuideActivity.start(context)

View File

@@ -22,6 +22,7 @@ import com.chwl.library.utils.SingleToastUtil
import com.example.lib_utils.ktx.getDimension
import com.example.lib_utils.log.ILog
import com.google.gson.JsonElement
import com.hjq.toast.ToastUtils
import com.netease.nim.uikit.StatusBarUtil
import io.reactivex.Single
import retrofit2.http.GET
@@ -43,26 +44,26 @@ class VipSetActivity : BaseViewBindingActivity<VipSetActivityBinding>(), ILog, V
initTitleBar(ResUtil.getString(R.string.vipSetTitle))
initVipIcons(binding.vipSetIcons1
, R.drawable.vip_center_identification_vipidentity_lv5
, R.drawable.vip_center_identification_vipidentity_lv6
, R.drawable.vip_center_identification_vipidentity_lv7
, R.drawable.vip_center_identification_vipidentity_lv8
, R.drawable.vip_center_identification_vipidentity_lv9
, R.drawable.vip_icon_lv5
, R.drawable.vip_icon_lv6
, R.drawable.vip_icon_lv7
, R.drawable.vip_icon_lv8
, R.drawable.vip_icon_lv9
)
initVipIcons(binding.vipSetIcons2
, R.drawable.vip_center_identification_vipidentity_lv6
, R.drawable.vip_center_identification_vipidentity_lv7
, R.drawable.vip_center_identification_vipidentity_lv8
, R.drawable.vip_center_identification_vipidentity_lv9
, R.drawable.vip_icon_lv6
, R.drawable.vip_icon_lv7
, R.drawable.vip_icon_lv8
, R.drawable.vip_icon_lv9
)
initVipIcons(binding.vipSetIcons3
, R.drawable.vip_center_identification_vipidentity_lv7
, R.drawable.vip_center_identification_vipidentity_lv8
, R.drawable.vip_center_identification_vipidentity_lv9
, R.drawable.vip_icon_lv7
, R.drawable.vip_icon_lv8
, R.drawable.vip_icon_lv9
)
initVipIcons(binding.vipSetIcons4
, R.drawable.vip_center_identification_vipidentity_lv8
, R.drawable.vip_center_identification_vipidentity_lv9
, R.drawable.vip_icon_lv8
, R.drawable.vip_icon_lv9
)
UserModel.get().getUserInfo(AuthModel.get().currentUid)
@@ -110,7 +111,9 @@ class VipSetActivity : BaseViewBindingActivity<VipSetActivityBinding>(), ILog, V
setSwitchView(view,!value)
}
.doOnError {
it?.message?.let {
ToastUtils.show(it)
}
}
.compose(bindToLifecycle())
.subscribe()

View File

@@ -190,9 +190,6 @@ public class CommonWebViewActivity extends BaseActivity {
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true); //新接入h5游戏需要的设置
webView.getSettings().setMediaPlaybackRequiresUserGesture(false); //新接入h5游戏需要的设置
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); //新接入h5游戏需要的设置
// 设置 WebView 可以在 HTTPS 通道上加载 HTTP 资源Android 4.4 后的暗坑
// 因为 Android 4.4 后默认不允许在 HTTPS 通道上加载 HTTP 资源
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

View File

@@ -0,0 +1,287 @@
package com.chwl.app.ui.webview.baishun
import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.Bitmap
import android.net.http.SslError
import android.os.Build
import android.os.Bundle
import android.webkit.SslErrorHandler
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AlertDialog
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.chwl.app.databinding.RoomGameFragmentBinding
import com.chwl.core.auth.AuthModel
import com.chwl.core.pay.event.GetWalletInfoEvent
import com.chwl.core.pay.event.UpdateWalletInfoEvent
import com.chwl.core.room.game.bean.BaiShunGameConfig
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.setViewWH
import com.chwl.library.common.util.setVis
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.ScreenUtils
import com.google.gson.Gson
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class LeaderccGameWebFragment : BaseViewBindingFragment<RoomGameFragmentBinding>(),
IBaiShunGameView {
private var gameConfig: BaiShunGameConfig? = null
private var gameUrl = ""
private var isLoadError = false
private var listener: IBaiShunGameListener? = null
var leaderccJSBridge : LeaderccJSBridge? = null
companion object {
fun newInstance(
url: String,
config: BaiShunGameConfig
): LeaderccGameWebFragment {
val bundle = Bundle()
bundle.putString("url", url)
bundle.putSerializable("config", config)
return LeaderccGameWebFragment().apply {
arguments = bundle
}
}
}
override fun init() {
val url = arguments?.getString("url")
gameConfig = arguments?.getSerializable("config") as? BaiShunGameConfig
if (url.isNullOrEmpty() || gameConfig == null) {
toast(R.string.utils_net_beanobserver_05)
return
}
gameUrl = url
initView()
binding.webView.isInvisible = true
binding.webView.loadUrl(url)
}
private fun initView() {
initWebView()
}
@SuppressLint("SetJavaScriptEnabled", "JavascriptInterface")
private fun initWebView() {
//防⽌⽤浏览器打开⽹⻚
binding.webView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
isLoadError = false
if (url == gameUrl) {
dialogManager.showProgressDialog(requireContext())
}
}
override fun onReceivedError(
view: WebView?,
errorCode: Int,
description: String?,
failingUrl: String?
) {
super.onReceivedError(view, errorCode, description, failingUrl)
isLoadError = true
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
onReceivedError(failingUrl, errorCode, description)
}
}
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
super.onReceivedError(view, request, error)
isLoadError = true
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
onReceivedError(request?.url?.toString(), error?.errorCode, error?.description)
}
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
if (!isLoadError) {
binding.webView.isVisible = true
}
}
override fun onReceivedSslError(
view: WebView,
handler: SslErrorHandler,
error: SslError?
) {
// super.onReceivedSslError(view, handler, error);
val builder = AlertDialog.Builder(view.context)
builder.setMessage(ResUtil.getString(R.string.ui_webview_commonwebviewactivity_07))
builder.setPositiveButton(
ResUtil.getString(R.string.ui_webview_commonwebviewactivity_08)
) { dialog, which ->
handler.proceed() // 接受https所有网站的证书
}
builder.setNegativeButton(
ResUtil.getString(R.string.ui_webview_commonwebviewactivity_09)
) { dialog, which -> handler.cancel() }
val dialog = builder.create()
dialog.show()
}
}
//设置webview背景透明,默认为⽩⾊
binding.webView.setBackgroundColor(0)
//设置view背景透明默认为⽩⾊ 可选(单独activity添加webView组件时需要添加)
binding.root.setBackgroundColor(0)
val settings = binding.webView.settings
//设置⽀持Javascript
settings.javaScriptEnabled = true
//设置默认⽂本编码
settings.defaultTextEncodingName = "UTF-8"
//设置可访问本地⽂件
settings.allowFileAccess = true
//设置允许通过file url加载的Javascript读取全部资源(包括⽂件,http,https)
settings.allowUniversalAccessFromFileURLs = true
//设置优先加载缓存
settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
//设置启⽤HTML5 DOM storage
settings.domStorageEnabled = true
//设置开启数据库缓存
settings.databaseEnabled = true
settings.databasePath = (requireContext().applicationContext.filesDir.absolutePath)
//设置⽀持缩放
settings.setSupportZoom(true)
//设置⾃适应
settings.useWideViewPort = true
//设置⾃动播放媒体
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
settings.mediaPlaybackRequiresUserGesture = false
}
//设置5.0以上允许加载http和https混合的⻚⾯
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
}
//游戏调⽤的类,必须定义为 LingxianAndroid
leaderccJSBridge = LeaderccJSBridge(this)
binding.webView.addJavascriptInterface(leaderccJSBridge!!, "LingxianAndroid")
if (gameConfig?.showType == 2){
binding.webView.post {
binding.bg.setVis(true)
binding.bg.click {
leaderccJSBridge?.closeGame()
}
}
}
binding.webView.postDelayed({ dialogManager?.dismissDialog() }, 2000)
}
override fun callJs(str: String) {
binding.webView.post {
binding.webView.loadUrl("javascript:$str")
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onWalletInfoUpdate(event: UpdateWalletInfoEvent?) {
updateGameWallet()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onGetWalletInfoEvent(event: GetWalletInfoEvent?) {
updateGameWallet()
}
private fun updateGameWallet() {
try {
//数据只是参考值需要根据⾃⼰APP进⾏赋值
val map = HashMap<String, Any>()
map["userId"] = AuthModel.get().currentUid
val str = "walletUpdate" + "(" + Gson().toJson(map) + ")"
this.callJs(str)
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun getGameConfig() = gameConfig
override fun getListener(): IBaiShunGameListener? {
return listener
}
fun setListener(listener: IBaiShunGameListener) {
this.listener = listener
}
override fun getActivity2(): Activity? {
return activity
}
override fun onResume() {
super.onResume()
leaderccJSBridge?.updateCoin()
}
override fun getDialogManager2(): DialogManager {
return super.getDialogManager()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
}
private fun onReceivedError(url: String?, code: Int?, message: CharSequence?) {
if (url == gameUrl) {
binding.webView.isInvisible = true
dialogManager.dismissDialog()
showLoadErrorDialog(message?.toString() ?: "($code)")
}
}
private fun showLoadErrorDialog(message: String) {
dialogManager.showOkCancelDialog(
getString(R.string.load_failed),
message,
getString(R.string.retry),
getString(R.string.exit_text),
false, false, true, object : OkCancelDialogListener {
override fun onOk() {
binding.webView.reload()
}
override fun onCancel() {
super.onCancel()
listener?.onGameClose()
}
}, null, false
)
}
}

View File

@@ -0,0 +1,74 @@
package com.chwl.app.ui.webview.baishun
import android.webkit.JavascriptInterface
import androidx.annotation.Keep
import com.chwl.app.R
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.chwl.app.common.widget.dialog.DialogUiHelper
import com.chwl.app.ui.pay.ChargeActivity
import com.example.lib_utils.ktx.getString
import com.example.lib_utils.log.ILog
import com.google.gson.Gson
import org.json.JSONObject
@Keep
class LeaderccJSBridge(var view: IBaiShunGameView) : ILog {
@JavascriptInterface
public fun updateCoin() {
logD("游戏调⽤ updateCoin()")
try {
// val obj = JSONObject()
// val jsFunName = obj.optString("updateCoin")
// val config = view.getGameConfig()
// val str = (jsFunName + "(" + Gson().toJson(config) + ")")
// callJs(str)
val obj = JSONObject()
val jsFunName = obj.optString("updateCoin()")
callJs(jsFunName)
} catch (ex: Exception) {
ex.printStackTrace()
}
}
@JavascriptInterface
public fun closeGame() {
logD("游戏调⽤ closeGame")
view.getActivity2()?.runOnUiThread {
showExitDialog()
}
}
@JavascriptInterface
public fun pay() {
logD("游戏调⽤ pay")
view.getActivity2()?.runOnUiThread {
DialogUiHelper.showNeedCharge(view.getActivity2(), view.getDialogManager2())
}
}
@JavascriptInterface
private fun callJs(str: String) {
view.callJs(str)
}
private fun showExitDialog() {
view.getDialogManager2().showOkCancelDialog(
R.string.tip_tips.getString(),
R.string.home_refresh_fungameview_01.getString(),
R.string.exit_text.getString(),
R.string.cancel.getString(),
false, false, true, object : OkCancelDialogListener {
override fun onOk() {
super.onCancel()
view?.getListener()?.onGameClose()
}
override fun onCancel() {
}
}, null, false
)
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -138,6 +138,23 @@
android:layout_marginEnd="15dp"
android:background="@color/line_353548" />
<TextView
android:id="@+id/tv_vip_setting"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_setting_item_height"
android:gravity="center_vertical"
android:paddingStart="@dimen/dp_15"
android:paddingEnd="@dimen/dp_15"
android:text="@string/vipSet"
android:textColor="@color/text_title_color"
android:textSize="@dimen/sp_14"
app:drawableEndCompat="@drawable/arrow_right" /> <View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="15dp"
android:background="@color/line_353548" />
<TextView
android:id="@+id/tv_notice_setting"
android:layout_width="match_parent"

View File

@@ -1,10 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<View
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="0dp"
android:visibility="gone"
android:background="@color/transparent"
android:layout_weight="1"/>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
android:layout_height="0dp"
android:layout_weight="2"/>
</LinearLayout>

View File

@@ -5400,6 +5400,8 @@ You cannot join again within 24 hours after leaving</string>
<string name="avatar1">静态头像</string>
<string name="avatar2">GIF头像</string>
<string name="vipSet">Vip设置</string>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -12,6 +12,7 @@ import lombok.ToString;
/**
* Created by Administrator on 2017/8/7.
* banner跳转type
*/
@ToString
@Data

View File

@@ -2,6 +2,7 @@ package com.chwl.core.im.custom.bean;
/**
* Created by MadisonRong on 08/06/2018.
* MeFragment跳转type
*/
public class RouterType {
@@ -229,10 +230,6 @@ public class RouterType {
*/
public static final int MY_DRESS_ITEM = 79;
/**
* - Vip设置 todo do 等恒哥给 正式 type
*/
public static final int MY_VIP_SET = 80;
/**

View File

@@ -20,6 +20,7 @@ class BaiShunGameConfig : Serializable {
var language: String? = null
val gameConfig: Config? = null
val gsp: Int? = null
var showType: Int? = null
@Keep
class Config : Serializable {

View File

@@ -0,0 +1,49 @@
package com.chwl.core.room.game.bean;
public class GameInfo {
public boolean isShow;
public String mgId="";
public String name="";
public String pic="";
public String pic2="";
public String remark="";
public int seq;
public int showType;
public boolean isSelect;
public String skipContent="";
public String ruleValue="";
public boolean isStandardRoom;// 本地自己维护的,为了区分普通房
public String code="";
public boolean isStandardRoom() {
return this.isStandardRoom;
}
public boolean isFirstCharge() {
return code.equals("FIRST_CHARGE");
}
public boolean isSeizeTreasure() {
return code.equals("SEIZE_TREASURE");
}
public boolean isFindLove() {
return code.equals("FIND_LOVE");
}
public boolean isLeadercc() {
return code.equals("LEADERCC");
}
public boolean isNauticalAdventure() {
return code.equals("NAUTICAL_ADVENTURE");
}
public boolean isBaiShunGame() {
return code.equals("BAISHUN");
}
}

View File

@@ -1,37 +0,0 @@
package com.chwl.core.room.game.bean
import java.io.Serializable
data class GameInfo(
val isShow: Boolean = false,
val mgId: String = "",
var name: String = "",
val pic: String = "",
val pic2: String? = null,
val remark: String = "",
val seq: Int = 0,
var isSelect: Boolean = false,
val skipContent : String = "",
val ruleValue : String = "",
// 本地自己维护的,为了区分普通房
private var isStandardRoom: Boolean? = null,
var code: String? = "",
) : Serializable {
fun isStandardRoom() = isStandardRoom == true
fun asStandardRoom() {
isStandardRoom = true
}
override fun toString(): String {
return "GameInfo(isShow=$isShow, mgId='$mgId', name='$name', pic='$pic', pic2=$pic2, remark='$remark', seq=$seq, isSelect=$isSelect, skipContent='$skipContent', ruleValue='$ruleValue', isStandardRoom=$isStandardRoom)"
}
fun isFirstCharge(): Boolean = code == "FIRST_CHARGE"
fun isSeizeTreasure(): Boolean = code == "SEIZE_TREASURE"
fun isFindLove(): Boolean = code == "FIND_LOVE"
fun isLeadercc(): Boolean = code == "LEADERCC"
fun isNauticalAdventure(): Boolean = code == "NAUTICAL_ADVENTURE"
fun isBaiShunGame() = code == "BAISHUN"
}

View File

@@ -64,6 +64,19 @@ object LanguageHelper : ILog {
}
}
fun getH5GameLeaderccLan(): String {
val locale = getCurrentLanguage()
return if (locale == Locale.ENGLISH) {
"en-Us"
} else if (locale == Locale.TRADITIONAL_CHINESE) {
"zh-Tw"
} else if (locale.language.equals("ar", true)) {
return "ar-EG"
} else {
"en-Us"
}
}
/**
* 获取Locale
* @param language (四端一致的类型)

166
mode.json
View File

@@ -1,92 +1,80 @@
{
"contents": [
{
"height": 20,
"image": "https://img.molistar.xyz/default_avatar_molistar.png",
"key": "avatar",
"type": "IMAGE",
"width": 20
},
{
"key": "nick",
"text": {
"ar": "英文区",
"en": "英文区",
"zh": "英文区"
[
{
"baiShunGame": true,
"code": "BAISHUN",
"createTime": "2024-07-29 15:14:21",
"findLove": false,
"firstCharge": false,
"icon": "https://image.pekolive.com/DragonTiger.png",
"id": 120,
"leadercc": false,
"name": "DragonTiger",
"nauticalAdventure": false,
"ruleValue": {
"PLATFORM": "",
"IOS_LOW_VERSION": "",
"ANDROID_LOW_VERSION": "",
"USER_PHONE": "",
"RESERVE": {
"appChannel": "molistar",
"appId": 9498014797,
"code": "5f41ff10-af28-4b2b-a649-07fc3b239a3b",
"gameConfig": {
"currencyIcon": "https://image.molistar.xyz/ic_gold.png",
"sceneMode": 1
},
"gameMode": "2",
"gsp": 101
},
"textColor": "#FEF23E",
"type": "TEXT"
"NOT_CHANNELS": "",
"ANDROID_HIGH_VERSION": "",
"IOS_HIGH_VERSION": "",
"USER_LEVEL": ""
},
{
"height": 20,
"image": "https://image.pekolive.com/Lucky77.png",
"key": "gameIcon",
"type": "IMAGE",
"width": 20
},
{
"key": "diamondNum",
"text": {
"ar": "60000",
"en": "60000",
"zh": "60000"
},
"textColor": "#00EAFF",
"type": "TEXT"
}
],
"dimensionRatio": "375:60",
"fontSize": 12,
"nodeList": [
{
"content": {
"$ref": "$.contents[2]"
}
},
{
"text": " ",
"textColor": "#FFFFFF"
},
{
"content": {
"$ref": "$.contents[0]"
}
},
{
"text": " ",
"textColor": "#FFFFFF"
},
{
"content": {
"$ref": "$.contents[1]"
}
},
{
"text": " Win ",
"textColor": "#FFFFFF"
},
{
"content": {
"$ref": "$.contents[3]"
}
},
{
"text": " Coins",
"textColor": "#FFFFFF"
}
],
"partitionId": 1,
"resourceContent": "https://image.molistar.xyz/mini_game_floating_2.svga",
"resourceHeight": 60,
"resourceType": "SVGA",
"resourceWidth": 375,
"skipContent": "136",
"skipType": 7,
"svgaTextKey": "noble_text_tx",
"template": {
"ar": "{gameIcon} {avatar} {nick} Win {diamondNum} Coins",
"en": "{gameIcon} {avatar} {nick} Win {diamondNum} Coins",
"zh": "{gameIcon} {avatar} {nick} Win {diamondNum} Coins"
"seizeTreasure": false,
"seqNo": 0,
"showType": 2,
"skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/dragon-tiger/1.0.3/web-mobile/index.html",
"skipType": 3,
"skipUri": "https://game-center-test.jieyou.shop/game-packages/common-web/dragon-tiger/1.0.3/web-mobile/index.html",
"type": 3,
"updateTime": "2024-07-29 16:09:39"
},
"textColor": "#FFFFFF"
}
{
"baiShunGame": false,
"code": "LEADERCC",
"createTime": "2024-10-21 15:21:06",
"endTime": "2025-10-30 00:00:00",
"findLove": false,
"firstCharge": false,
"icon": "https://image.pekolive.com/luck5y.png",
"id": 138,
"leadercc": true,
"name": "Lucky Wheel",
"nauticalAdventure": false,
"ruleValue": {
"PLATFORM": "",
"IOS_LOW_VERSION": "",
"ANDROID_LOW_VERSION": "",
"USER_PHONE": "",
"RESERVE": {
"appChannel": "molistar",
"appId": 123456,
"code": "c5f9a679-a180-488d-8ea7-827eaee08396"
},
"NOT_CHANNELS": "",
"ANDROID_HIGH_VERSION": "",
"IOS_HIGH_VERSION": "",
"USER_LEVEL": ""
},
"seizeTreasure": false,
"seqNo": 1,
"showType": 2,
"skipContent": "https://gztest.leadercc.com/molistar_games/wheel_medium/index.html?pl=molistar",
"skipType": 3,
"skipUri": "https://gztest.leadercc.com/molistar_games/wheel_medium/index.html?pl=molistar",
"startTime": "2024-10-20 00:00:00",
"type": 3,
"updateTime": "2024-10-22 16:05:25"
}
]