733 lines
25 KiB
Kotlin
733 lines
25 KiB
Kotlin
package com.gh.common
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.app.Activity
|
|
import android.content.Context
|
|
import android.util.Base64
|
|
import android.view.View
|
|
import android.webkit.JavascriptInterface
|
|
import androidx.annotation.Keep
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.FragmentActivity
|
|
import androidx.fragment.app.FragmentManager
|
|
import com.alibaba.android.arouter.launcher.ARouter
|
|
import com.gh.common.util.*
|
|
import com.gh.common.util.LogUtils
|
|
import com.gh.download.DownloadManager
|
|
import com.gh.download.PackageObserver
|
|
import com.gh.gamecenter.BuildConfig
|
|
import com.gh.gamecenter.ImageViewerActivity
|
|
import com.gh.gamecenter.WebActivity
|
|
import com.gh.gamecenter.common.callback.BiCallback
|
|
import com.gh.gamecenter.common.constant.Constants
|
|
import com.gh.gamecenter.common.constant.RouteConsts
|
|
import com.gh.gamecenter.common.entity.NotificationUgc
|
|
import com.gh.gamecenter.common.loghub.LoghubUtils
|
|
import com.gh.gamecenter.common.provider.IHelpAndFeedbackProvider
|
|
import com.gh.gamecenter.common.tracker.Tracker
|
|
import com.gh.gamecenter.common.utils.*
|
|
import com.gh.gamecenter.common.view.dsbridge.CompletionHandler
|
|
import com.gh.gamecenter.core.AppExecutor
|
|
import com.gh.gamecenter.core.runOnIoThread
|
|
import com.gh.gamecenter.core.runOnUiThread
|
|
import com.gh.gamecenter.core.utils.*
|
|
import com.gh.gamecenter.entity.SensorsEvent
|
|
import com.gh.gamecenter.eventbus.EBDownloadStatus
|
|
import com.gh.gamecenter.eventbus.EBPackage
|
|
import com.gh.gamecenter.feature.entity.Badge
|
|
import com.gh.gamecenter.feature.entity.GameEntity
|
|
import com.gh.gamecenter.login.user.LoginTag
|
|
import com.gh.gamecenter.login.user.UserManager
|
|
import com.gh.gamecenter.login.user.UserRepository
|
|
import com.gh.gamecenter.login.utils.LoginHelper
|
|
import com.gh.gamecenter.login.utils.QuickLoginHelper
|
|
import com.gh.gamecenter.login.view.LoginActivity
|
|
import com.gh.gamecenter.personalhome.border.AvatarBorderActivity
|
|
import com.gh.gamecenter.setting.SettingBridge
|
|
import com.gh.vspace.VHelper
|
|
import com.halo.assistant.HaloApp
|
|
import com.lightgame.download.DataWatcher
|
|
import com.lightgame.download.DownloadEntity
|
|
import com.lightgame.download.DownloadStatus.*
|
|
import com.lightgame.utils.Utils
|
|
import org.greenrobot.eventbus.EventBus
|
|
import org.greenrobot.eventbus.Subscribe
|
|
import org.greenrobot.eventbus.ThreadMode
|
|
import org.json.JSONObject
|
|
import java.io.BufferedOutputStream
|
|
import java.io.File
|
|
import java.io.FileOutputStream
|
|
import java.util.*
|
|
|
|
class DefaultJsApi(
|
|
var context: Context,
|
|
val entrance: String = "",
|
|
private var mFragment: Fragment? = null,
|
|
private var mBbsId: String? = "",
|
|
) {
|
|
|
|
private var mLoginHandler: CompletionHandler<Any>? = null
|
|
private var mDownloadWatcher: DataWatcher? = null // 下载观察者
|
|
private var mDownloadUrlSet: HashSet<String>? = null // 下载的 url 集合
|
|
private var mDownloadHandler: CompletionHandler<Any>? = null // 下载信息回调
|
|
|
|
init {
|
|
if (mFragment != null) {
|
|
EventBus.getDefault().register(this)
|
|
autoUnregisterDownloadObserverIfNeeded(mFragment)
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun isGhzs(msg: Any): String {
|
|
return "true"
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun toast(msg: Any) {
|
|
Utils.toast(HaloApp.getInstance().application, msg.toString())
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun logMtaEvent(event: Any) {
|
|
// do nothing, mta is deprecated
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun logSensorsEvent(event: Any) {
|
|
val sensorsEvent = event.toString().toObject() ?: SensorsEvent()
|
|
val trackEvent = JSONObject()
|
|
tryCatchInRelease {
|
|
sensorsEvent.kv.split(",").forEach {
|
|
val kv = it.split(":")
|
|
trackEvent.put(kv[0], kv[1])
|
|
}
|
|
}
|
|
SensorsBridge.trackEvent(sensorsEvent.name, trackEvent)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getUserInfo(msg: Any): String {
|
|
return UserManager.getInstance().userInfoEntity?.toJson() ?: ""
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getUserToken(msg: Any): String {
|
|
return if (UserManager.getInstance().isLoggedIn) UserManager.getInstance().loginTokenEntity.accessToken.value else ""
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun login(msg: Any) {
|
|
if (SPUtils.getBoolean(Constants.SP_HAS_GET_PHONE_INFO) || NetworkUtils.isOpenMobileData(context)) {
|
|
QuickLoginHelper.startLogin(context, "浏览器")
|
|
} else {
|
|
val intent = LoginActivity.getIntent(context, "浏览器")
|
|
context.startActivity(intent)
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun refreshUserInfoBadge(msg: Any) {
|
|
val userInfoEntity = UserManager.getInstance().userInfoEntity
|
|
if (msg.toString().isNotEmpty()) {
|
|
val badge = msg.toString().toObject() ?: Badge()
|
|
userInfoEntity?.badge = badge
|
|
} else {
|
|
userInfoEntity?.badge = null
|
|
}
|
|
UserManager.getInstance().userInfoEntity = userInfoEntity
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getChannel(msg: Any): String {
|
|
return HaloApp.getInstance().channel
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getAppVersion(msg: Any): String {
|
|
return BuildConfig.VERSION_NAME
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getAppVersionCode(msg: Any): Int {
|
|
return PackageUtils.getGhVersionCode()
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun bindWechat(msg: Any, handler: CompletionHandler<Any>) {
|
|
context.ifLogin("浏览器") {
|
|
LoginHelper.loginWithWechat(object : LoginHelper.LoginCallback {
|
|
@SuppressLint("CheckResult")
|
|
override fun onLoginSuccess(loginType: LoginTag, jsonContent: JSONObject) {
|
|
|
|
val wechatLoginInfoMap = hashMapOf<String, String>()
|
|
wechatLoginInfoMap["openid"] = jsonContent.getString("openid")
|
|
wechatLoginInfoMap["unionid"] = jsonContent.getString("unionid")
|
|
wechatLoginInfoMap["access_token"] = jsonContent.getString("access_token")
|
|
wechatLoginInfoMap["refresh_token"] = jsonContent.getString("refresh_token")
|
|
|
|
WechatBindHelper.bindWechat(wechatLoginInfoMap, object : BiCallback<Boolean, Boolean> {
|
|
override fun onFirst(first: Boolean) {
|
|
handler.complete(true)
|
|
}
|
|
|
|
override fun onSecond(second: Boolean) {
|
|
handler.complete(false)
|
|
}
|
|
})
|
|
|
|
LoginHelper.unregisterCallback()
|
|
}
|
|
|
|
override fun onLoginFailure(loginType: LoginTag, error: String) {
|
|
handler.complete(false)
|
|
|
|
LoginHelper.unregisterCallback()
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun refreshWechatBindData(msg: Any) {
|
|
WechatBindHelper.getWechatConfig(null)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun copyText(msg: Any) {
|
|
runOnUiThread {
|
|
msg.toString().copyTextAndToast()
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startApp(msg: Any) {
|
|
val packageName = msg.toString()
|
|
val context = HaloApp.getInstance().application
|
|
|
|
runOnUiThread {
|
|
// 若畅玩列表中安装了,优先启动畅玩游戏
|
|
if (VHelper.isInstalled(packageName)) {
|
|
if (!VHelper.showDialogIfVSpaceIsNeeded(context, "", "", "")) {
|
|
VHelper.launch(context, packageName)
|
|
}
|
|
} else {
|
|
PackageUtils.launchApplicationByPackageName(context, packageName)
|
|
}
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun openImage(event: Any) {
|
|
val imageEvent = event.toString().toObject() ?: ImageEvent()
|
|
|
|
val context = CurrentActivityHolder.getCurrentActivity()
|
|
|
|
context?.startActivity(ImageViewerActivity.getIntent(context, imageEvent.imageList, imageEvent.position, "浏览器"))
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun isInstalled(event: Any): String {
|
|
val localInstalledPackageList = PackageUtils.getAllPackageName(HaloApp.getInstance().application)
|
|
val packageNameList: ArrayList<String> = event.toString().toObject() ?: ArrayList()
|
|
|
|
for (packageName in packageNameList) {
|
|
if (!localInstalledPackageList.contains(packageName)) {
|
|
return "false"
|
|
}
|
|
}
|
|
|
|
return "true"
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun openBase64Image(event: Any) {
|
|
val context = CurrentActivityHolder.getCurrentActivity()
|
|
|
|
ImageViewerActivity.base64Image = event.toString()
|
|
|
|
context?.startActivity(ImageViewerActivity.getBase64Intent(context, true))
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun openNotificationSetting(msg: Any) {
|
|
NotificationHelper.show(context as AppCompatActivity, NotificationUgc.LOGIN)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun useDarkStatusBarText(msg: Any) {
|
|
runOnUiThread {
|
|
DisplayUtils.transparentStatusBar(context as AppCompatActivity)
|
|
DisplayUtils.setLightStatusBar(context as AppCompatActivity, msg.toString() == "true")
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 是否为论坛详情的专区
|
|
*/
|
|
@JavascriptInterface
|
|
fun isForumZone(msg: Any): Boolean {
|
|
return !mBbsId.isNullOrEmpty()
|
|
}
|
|
|
|
/**
|
|
* 打开论坛搜索页
|
|
*/
|
|
@JavascriptInterface
|
|
fun openForumSearch(msg: Any) {
|
|
runOnUiThread {
|
|
DirectUtils.directToForumOrUserSearch(context, mBbsId ?: "", entrance.ifBlank { "内部网页" })
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun exitWebView(msg: Any) {
|
|
runOnUiThread { (context as Activity).finish() }
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun updateRegulationTestStatus(msg: Any) {
|
|
if (msg.toString().toLowerCase(Locale.getDefault()) == "pass") {
|
|
SPUtils.setString(Constants.SP_REGULATION_TEST_PASS_STATUS, "pass")
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getStatusBarHeight(msg: Any): String {
|
|
val statusBarHeight = DisplayUtils.getStatusBarHeight(context.resources)
|
|
return "$statusBarHeight"
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getGid(msg: Any): String {
|
|
return HaloApp.getInstance().gid
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun showIncompatibleVersionDialog(msg: Any) {
|
|
DialogHelper.showUpgradeDialog(context)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun shareBase64Image(event: Any) {
|
|
val imageShareEvent = event.toString().toObject() ?: ImageShareEvent()
|
|
val context = CurrentActivityHolder.getCurrentActivity()
|
|
ImageViewerActivity.base64Image = imageShareEvent.image.run {
|
|
if (this.startsWith("data:image/png;base64")) this.split(",")[1] else this
|
|
}
|
|
MessageShareUtils.getInstance(context).shareFromWeb(context, imageShareEvent.type)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun inviteFriends(event: Any) {
|
|
val inviteEvent = event.toString().toObject() ?: InviteFriendsEvent()
|
|
val context = CurrentActivityHolder.getCurrentActivity()
|
|
if ("poster" == inviteEvent.type) {
|
|
ImageViewerActivity.base64Image = inviteEvent.poster.run {
|
|
if (this.startsWith("data:image/png;base64")) this.split(",")[1] else this
|
|
}
|
|
MessageShareUtils.getInstance(context).shareInviteFriends(context, inviteEvent.way)
|
|
} else {
|
|
ShareUtils.getInstance(context).shareInviteFriends(context, inviteEvent.url, inviteEvent.way)
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun bindPhone(msg: Any) {
|
|
val intent = SettingBridge.getBindPhoneNormalIntent(context, false)
|
|
context.startActivity(intent)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun updateTitle(msg: Any) {
|
|
if (context is WebActivity) {
|
|
runOnUiThread { (context as WebActivity).setNavigationTitle(msg.toString()) }
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun logoutExitWebViewAndRedirectToLogin() {
|
|
UserRepository.getInstance().logout()
|
|
if (context is Activity) {
|
|
AppExecutor.uiExecutor.executeWithDelay(Runnable {
|
|
context.ifLogin("内部网页")
|
|
(context as Activity).finish()
|
|
}, 100)
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun openInNewWebview(url: Any) {
|
|
runOnUiThread { DirectUtils.directToWebView(context, url.toString(), entrance.ifBlank { "内部网页" }) }
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun postWearBadgeTask(msg: Any) {
|
|
// do nothing
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startEnergyCenter(msg: Any) {
|
|
// do nothing
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startEnergyHouse(msg: Any) {
|
|
// do nothing
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun showQaFeedbackDialog(msg: Any) {
|
|
val mHelpAndFeedbackHelp =
|
|
ARouter.getInstance().build(RouteConsts.provider.helpAndFeedback).navigation() as? IHelpAndFeedbackProvider
|
|
mHelpAndFeedbackHelp?.showQaFeedbackDialogFragment(context as AppCompatActivity, msg.toString())
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getMetaObject(msg: Any): String {
|
|
return LogUtils.getMetaObject().toString()
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getLaunchId(msg: Any): String {
|
|
return Tracker.launchId
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getSessionId(msg: Any): String {
|
|
return Tracker.sessionId
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun postLogEvent(event: Any) {
|
|
val logEvent = event.toString().toObject() ?: LogEvent()
|
|
debugOnly {
|
|
Utils.log("LogUtils->${logEvent.jsonString}")
|
|
}
|
|
LoghubUtils.log(logEvent.jsonString, logEvent.logStore, false)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startAvatarBorderPage(msg: Any) {
|
|
context.startActivity(AvatarBorderActivity.getIntent(context, msg.toString()))
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun isNetworkConnected(): Boolean {
|
|
return NetworkUtils.isNetworkConnected(context)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun isWifiConnected(): Boolean {
|
|
return NetworkUtils.isWifiConnected(context)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun enableBackToActivity(msg: Any) {
|
|
FloatingBackViewManager.enableBackView(FloatingBackViewManager.TYPE_ACTIVITY, msg.toString())
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun saveBase64ImageToGallery(msg: Any) {
|
|
val base64StringData = msg.toString()
|
|
runOnUiThread {
|
|
(context as? FragmentActivity)?.checkStoragePermissionBeforeAction {
|
|
runOnIoThread {
|
|
val base64String = base64StringData.replace("data:image/png;base64", "")
|
|
tryWithDefaultCatch {
|
|
val imageFile =
|
|
File(HaloApp.getInstance().cacheDir.absolutePath + File.separator + System.currentTimeMillis() + ".png")
|
|
val decodedString = Base64.decode(base64String, Base64.DEFAULT)
|
|
val bos = BufferedOutputStream(FileOutputStream(imageFile))
|
|
bos.write(decodedString)
|
|
bos.flush()
|
|
bos.close()
|
|
|
|
ImageUtils.saveImageToFile(imageFile, "", true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun loginWithCallback(msg: Any, handler: CompletionHandler<Any>) {
|
|
mLoginHandler = handler
|
|
login(msg)
|
|
}
|
|
|
|
fun onLogin() {
|
|
mLoginHandler?.complete(true)
|
|
mLoginHandler = null
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun openInNewFullWebview(url: Any) {
|
|
runOnUiThread { DirectUtils.directToFullScreenWebPage(context, url.toString(), true, entrance) }
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun checkUpdateGhzs(msg: Any) {
|
|
context.startActivity(SettingBridge.getAboutIntent(context, true))
|
|
}
|
|
|
|
@JavascriptInterface
|
|
public fun clickGameActivityDownloadBtn(event: Any) {
|
|
val gameActivityEvent = event.toString().toObject() ?: GameActivityEvent()
|
|
GameActivityDownloadHelper.start(context, gameActivityEvent)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun isGameActivityTaskCompleted(event: Any, handler: CompletionHandler<Any>) {
|
|
val gameActivityEvent = event.toString().toObject() ?: GameActivityEvent()
|
|
GameActivityDownloadHelper.checkTaskComplete(context, gameActivityEvent, handler)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun postGameActivityExposureEvent(event: Any) {
|
|
val gameActivityEvent = event.toString().toObject() ?: GameActivityEvent()
|
|
GameActivityDownloadHelper.postExposureEvent(gameActivityEvent)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getEntrance(msg: Any): String {
|
|
return when {
|
|
entrance.contains("论坛-活动") -> "社区-活动tab-活动banner"
|
|
entrance.contains("启动弹窗") -> "首页_弹窗"
|
|
entrance.contains("新首页-轮播图") -> "首页banner"
|
|
entrance.contains("论坛banner") -> "社区banner"
|
|
entrance.contains("启动广告") -> "app_开屏文案"
|
|
// entrance.contains("资讯广场-轮播图") -> "资讯_活动banner"
|
|
entrance.contains("通用链接合集") -> "资讯_活动banner"
|
|
entrance.contains("视频流广告位") -> "视频流_广告位"
|
|
entrance.contains("我的光环banner") -> "我的光环_banner"
|
|
entrance.contains("论坛详情页置顶栏") -> "社区_论坛置顶"
|
|
|
|
else -> entrance
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun getInstallStatus(event: Any): String {
|
|
val localInstalledPackageList = PackageUtils.getAllPackageName(HaloApp.getInstance().application)
|
|
val packageNameList: ArrayList<String> = event.toString().toObject() ?: ArrayList()
|
|
val installStatusMap: HashMap<String, Boolean> = hashMapOf()
|
|
|
|
for (packageName in packageNameList) {
|
|
installStatusMap[packageName] =
|
|
localInstalledPackageList.contains(packageName) || VHelper.isInstalled(packageName)
|
|
}
|
|
|
|
return installStatusMap.toJson()
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun installDownloadedGame(event: Any) {
|
|
val url = event.toString()
|
|
val vUrl = VHelper.getVUrl(url)
|
|
|
|
val downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(url, null, false)
|
|
?: DownloadManager.getInstance().getDownloadEntitySnapshot(vUrl, null, false)
|
|
|
|
downloadEntity?.let {
|
|
PackageInstaller.install(context, it, showUnzipToast = false)
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun registerDownloadCallback(msg: Any, handler: CompletionHandler<Any>) {
|
|
val downloadUrlSet: HashSet<String> = msg.toString().toObject() ?: return
|
|
|
|
mDownloadHandler = handler
|
|
mDownloadUrlSet = downloadUrlSet
|
|
|
|
if (mDownloadWatcher == null) {
|
|
mDownloadWatcher = object : DataWatcher() {
|
|
override fun onDataInit(downloadEntity: DownloadEntity) {
|
|
onDataChanged(downloadEntity)
|
|
}
|
|
|
|
override fun onDataChanged(downloadEntity: DownloadEntity?) {
|
|
val url = VHelper.getOriginalUrl(downloadEntity?.url)
|
|
|
|
if (downloadEntity != null && mDownloadUrlSet?.contains(url) == true) {
|
|
mDownloadHandler?.setProgressData(
|
|
SimpleDownloadEntity.fromDownloadEntity(downloadEntity).toJson()
|
|
)
|
|
}
|
|
}
|
|
}
|
|
DownloadManager.getInstance().addObserver(mDownloadWatcher)
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun registerPackageChangesCallback(msg: Any, handler: CompletionHandler<Any>) {
|
|
PackageObserver.registerPackageChangeChangeListener(object : PackageObserver.PackageChangeListener {
|
|
override fun onChanged(data: EBPackage) {
|
|
handler.setProgressData(data.toJson())
|
|
}
|
|
})
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startDownload(msg: Any) {
|
|
val gameEntity: GameEntity? = msg.toString().toObject()
|
|
|
|
if (gameEntity == null) {
|
|
ToastUtils.toast("下载异常,请稍后重试")
|
|
return
|
|
}
|
|
|
|
runOnUiThread {
|
|
// 用一个假的 view 来当 downloadView
|
|
val stubView = View(context)
|
|
DownloadItemUtils.setOnClickListener(
|
|
position = 0,
|
|
context = context,
|
|
downloadBtn = stubView,
|
|
gameEntity = gameEntity,
|
|
adapter = null,
|
|
entrance = "(网页活动)",
|
|
location = "",
|
|
traceEvent = null,
|
|
clickCallback = null,
|
|
refreshCallback = null,
|
|
allStateClickCallback = null
|
|
)
|
|
|
|
stubView.performClick()
|
|
}
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun resumeDownload(msg: Any) {
|
|
val url = msg.toString()
|
|
|
|
DownloadManager.getInstance().resumeDownload(url)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun pauseDownload(msg: Any) {
|
|
val url = msg.toString()
|
|
|
|
DownloadManager.getInstance().pause(url)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun shareText(event: Any) {
|
|
val textShareEvent = event.toString().toObject() ?: TextShareEvent()
|
|
if (textShareEvent.text.isNotEmpty() && textShareEvent.type.isNotEmpty()) {
|
|
val activity = CurrentActivityHolder.getCurrentActivity()
|
|
MessageShareUtils.getInstance(activity).shareTextFromWeb(activity, textShareEvent.text, textShareEvent.type)
|
|
}
|
|
}
|
|
|
|
private fun autoUnregisterDownloadObserverIfNeeded(fragment: Fragment?) {
|
|
fragment?.parentFragmentManager?.registerFragmentLifecycleCallbacks(
|
|
object : FragmentManager.FragmentLifecycleCallbacks() {
|
|
override fun onFragmentViewDestroyed(fm: FragmentManager, f: Fragment) {
|
|
super.onFragmentViewDestroyed(fm, f)
|
|
if (f === fragment) {
|
|
fragment.parentFragmentManager.unregisterFragmentLifecycleCallbacks(this)
|
|
|
|
if (mDownloadWatcher != null) {
|
|
DownloadManager.getInstance().removeObserver(mDownloadWatcher)
|
|
}
|
|
|
|
EventBus.getDefault().unregister(this@DefaultJsApi)
|
|
}
|
|
}
|
|
|
|
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
|
|
super.onFragmentResumed(fm, f)
|
|
|
|
if (f === fragment && mDownloadWatcher != null) {
|
|
DownloadManager.getInstance().addObserver(mDownloadWatcher)
|
|
}
|
|
}
|
|
|
|
override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
|
|
super.onFragmentPaused(fm, f)
|
|
|
|
if (f === fragment && mDownloadWatcher != null) {
|
|
DownloadManager.getInstance().removeObserver(mDownloadWatcher)
|
|
}
|
|
}
|
|
}, false
|
|
)
|
|
}
|
|
|
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
|
fun onEventMainThread(status: EBDownloadStatus) {
|
|
// 将下载任务删除事件回调给网页
|
|
if (mDownloadHandler != null && "delete" == status.status) {
|
|
mDownloadHandler?.setProgressData(SimpleDownloadEntity(status.url, 0F, "UNKNOWN").toJson())
|
|
}
|
|
}
|
|
|
|
@Keep
|
|
internal class ImageEvent(var imageList: ArrayList<String> = arrayListOf(), var position: Int = 0)
|
|
|
|
@Keep
|
|
internal class ImageShareEvent(var image: String = "", var type: String = "")
|
|
|
|
@Keep
|
|
internal class TextShareEvent(var text: String = "", var type: String = "")
|
|
|
|
@Keep
|
|
internal class InviteFriendsEvent(
|
|
var type: String = "",
|
|
var way: String = "",
|
|
var url: String = "",
|
|
var poster: String = ""
|
|
)
|
|
|
|
@Keep
|
|
internal class LogEvent(var jsonString: String = "", var logStore: String = "")
|
|
|
|
@Keep
|
|
class GameActivityEvent(
|
|
var gameId: String = "",
|
|
var activityTitle: String = "",
|
|
var activityId: String = "",
|
|
var platform: String = ""
|
|
)
|
|
|
|
@Keep
|
|
class SimpleDownloadEntity(
|
|
var url: String = "",
|
|
var progress: Float = 0F,
|
|
var status: String = "" // DOWNLOADING, PAUSED, DOWNLOADED, ERROR, UNKNOWN
|
|
) {
|
|
companion object {
|
|
fun fromDownloadEntity(downloadEntity: DownloadEntity): SimpleDownloadEntity {
|
|
val status: String = when (downloadEntity.status) {
|
|
add,
|
|
download,
|
|
downloading -> "DOWNLOADING"
|
|
|
|
done -> "DOWNLOADED"
|
|
|
|
pause,
|
|
resume,
|
|
subscribe,
|
|
waiting -> "PAUSED"
|
|
|
|
cancel,
|
|
delete -> "UNKNOWN"
|
|
|
|
else -> "ERROR"
|
|
}
|
|
|
|
return SimpleDownloadEntity(
|
|
url = VHelper.getOriginalUrl(downloadEntity.url),
|
|
progress = downloadEntity.percent.toFloat(),
|
|
status = status
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|