451 lines
15 KiB
Kotlin
451 lines
15 KiB
Kotlin
package com.gh.common
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.app.Activity
|
|
import android.content.Context
|
|
import android.util.Base64
|
|
import android.webkit.JavascriptInterface
|
|
import androidx.annotation.Keep
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.fragment.app.FragmentActivity
|
|
import com.gh.base.CurrentActivityHolder
|
|
import com.gh.common.constant.Constants
|
|
import com.gh.common.loghub.LoghubUtils
|
|
import com.gh.common.tracker.Tracker
|
|
import com.gh.common.util.*
|
|
import com.gh.common.view.dsbridge.CompletionHandler
|
|
import com.gh.gamecenter.*
|
|
import com.gh.gamecenter.energy.EnergyCenterActivity
|
|
import com.gh.gamecenter.energy.EnergyHouseActivity
|
|
import com.gh.gamecenter.entity.*
|
|
import com.gh.gamecenter.help.QaFeedbackDialogFragment
|
|
import com.gh.gamecenter.manager.UserManager
|
|
import com.gh.gamecenter.personalhome.border.AvatarBorderActivity
|
|
import com.gh.gamecenter.security.BindPhoneActivity
|
|
import com.gh.gamecenter.user.LoginTag
|
|
import com.gh.gamecenter.user.UserRepository
|
|
import com.halo.assistant.HaloApp
|
|
import com.lightgame.utils.Utils
|
|
import org.json.JSONObject
|
|
import java.io.BufferedOutputStream
|
|
import java.io.File
|
|
import java.io.FileOutputStream
|
|
import java.util.*
|
|
|
|
class DefaultJsApi(var context: Context) {
|
|
|
|
private var mLoginHandler: CompletionHandler<Any>? = null
|
|
|
|
@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) {
|
|
val mtaEvent = event.toString().toObject() ?: MtaEvent()
|
|
|
|
MtaHelper.onEvent(mtaEvent.name, mtaEvent.key, mtaEvent.value)
|
|
}
|
|
|
|
@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) {
|
|
EnergyTaskHelper.postEnergyTask("bind_wechat")
|
|
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()
|
|
PackageUtils.launchApplicationByPackageName(HaloApp.getInstance().application, 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()
|
|
|
|
Base64ImageHolder.image = 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 exitWebView(msg: Any) {
|
|
runOnUiThread { (context as Activity).finish() }
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun updateRegulationTestStatus(msg: Any) {
|
|
if (msg.toString().toLowerCase(Locale.getDefault()) == "pass") {
|
|
EnergyTaskHelper.postEnergyTask("finish_etiquette_exam")
|
|
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()
|
|
Base64ImageHolder.image = 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) {
|
|
Base64ImageHolder.image = 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 = BindPhoneActivity.getNormalIntent(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(), "内部网页") }
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun postWearBadgeTask(msg: Any) {
|
|
EnergyTaskHelper.postEnergyTask("wear_badge")
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startEnergyCenter(msg: Any) {
|
|
context.startActivity(EnergyCenterActivity.getIntent(context))
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startEnergyHouse(msg: Any) {
|
|
context.startActivity(EnergyHouseActivity.getIntent(context))
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun showQaFeedbackDialog(msg: Any) {
|
|
QaFeedbackDialogFragment.show(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 startBBSStayTimeCount(msg: Any) {
|
|
BbsStayTimeHelper.enableStayTimeCount(msg.toString().toInt())
|
|
}
|
|
|
|
@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) }
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun startGameCollectionSquareBrowseTask(event: Any) {
|
|
val browseTimeEvent = event.toString().toObject() ?: BrowseTaskEvent()
|
|
GameCollectionSquareBrowseTaskHelper.enableBrowseTimeCount(
|
|
browseTimeEvent.timeout.toInt(),
|
|
browseTimeEvent.isFinished == "true"
|
|
)
|
|
}
|
|
|
|
@JavascriptInterface
|
|
fun checkUpdateGhzs(msg: Any) {
|
|
context.startActivity(AboutActivity.getIntent(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)
|
|
}
|
|
|
|
@Keep
|
|
internal data class ImageEvent(var imageList: ArrayList<String> = arrayListOf(), var position: Int = 0)
|
|
|
|
@Keep
|
|
internal data class ImageShareEvent(var image: String = "", var type: String = "")
|
|
|
|
@Keep
|
|
internal data class InviteFriendsEvent(
|
|
var type: String = "",
|
|
var way: String = "",
|
|
var url: String = "",
|
|
var poster: String = ""
|
|
)
|
|
|
|
@Keep
|
|
internal data class LogEvent(var jsonString: String = "", var logStore: String = "")
|
|
|
|
@Keep
|
|
internal data class BrowseTaskEvent(var timeout: String = "", var isFinished: String = "")
|
|
|
|
@Keep
|
|
data class GameActivityEvent(
|
|
var gameId: String = "",
|
|
var activityTitle: String = "",
|
|
var activityId: String = "",
|
|
var platform: String = ""
|
|
)
|
|
}
|