|
@@ -11,16 +11,21 @@ import android.view.View
|
|
|
import android.view.WindowManager
|
|
|
import android.webkit.*
|
|
|
import android.widget.FrameLayout
|
|
|
+import cn.yyxx.eyuangame.base.utils.Logger
|
|
|
import cn.yyxx.eyuangame.core.entity.ClickType
|
|
|
+import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
|
|
|
import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
|
|
|
import cn.yyxx.eyuangame.core.impl.SdkDrive
|
|
|
import cn.yyxx.eyuangame.core.impl.SdkJsImpl
|
|
|
+import cn.yyxx.eyuangame.core.impl.share.ShareImpl
|
|
|
+import cn.yyxx.eyuangame.core.internal.IImplCallback
|
|
|
import cn.yyxx.eyuangame.core.internal.IJsCallback
|
|
|
import cn.yyxx.eyuangame.core.ui.dialog.ScaleLoadingDialog
|
|
|
import cn.yyxx.support.AndroidBug5497Workaround
|
|
|
+import cn.yyxx.support.JsonUtils
|
|
|
import cn.yyxx.support.ResUtils
|
|
|
import cn.yyxx.support.device.DeviceInfoUtils
|
|
|
-import cn.yyxx.support.hawkeye.ToastUtils
|
|
|
+import org.json.JSONObject
|
|
|
|
|
|
/**
|
|
|
* @author #Suyghur.
|
|
@@ -28,23 +33,73 @@ import cn.yyxx.support.hawkeye.ToastUtils
|
|
|
*/
|
|
|
class HybridActivity : Activity(), View.OnClickListener {
|
|
|
|
|
|
- // private lateinit var ivReturn: ImageView
|
|
|
-// private lateinit var tvTitle: TextView
|
|
|
+ private var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
|
|
|
+ private var mFileChooseParams: WebChromeClient.FileChooserParams? = null
|
|
|
private lateinit var webView: WebView
|
|
|
private var loadingDialog: ScaleLoadingDialog? = null
|
|
|
|
|
|
|
|
|
private val callback = object : IJsCallback {
|
|
|
|
|
|
- override fun onInvoke(method: String, data: String) {
|
|
|
- ToastUtils.toastInfo(this@HybridActivity, "调用Android原生方法$method")
|
|
|
- }
|
|
|
-
|
|
|
override fun onCallback(method: String, data: String): String {
|
|
|
- return when (method) {
|
|
|
- "getComm" -> SdkDrive.instance.getComm(this@HybridActivity)
|
|
|
- else -> ""
|
|
|
+ when (method) {
|
|
|
+ "getCommon" -> return SdkDrive.instance.getComm(this@HybridActivity)
|
|
|
+ "close" -> {
|
|
|
+ runOnUiThread {
|
|
|
+ this@HybridActivity.finish()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "back" -> {
|
|
|
+ runOnUiThread {
|
|
|
+ onBackPressed()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "facebookShare" -> {
|
|
|
+ kotlin.runCatching {
|
|
|
+ val jsonObject = JSONObject(data)
|
|
|
+ val line = if (JsonUtils.hasJsonKey(jsonObject, "line")) {
|
|
|
+ jsonObject.getString("line")
|
|
|
+ } else {
|
|
|
+ ""
|
|
|
+ }
|
|
|
+ val tag = if (JsonUtils.hasJsonKey(jsonObject, "tag")) {
|
|
|
+ jsonObject.getString("tag")
|
|
|
+ } else {
|
|
|
+ ""
|
|
|
+ }
|
|
|
+ val quote = if (JsonUtils.hasJsonKey(jsonObject, "quote")) {
|
|
|
+ jsonObject.getString("quote")
|
|
|
+ } else {
|
|
|
+ ""
|
|
|
+ }
|
|
|
+ ShareImpl.instance.invokeShare2Fb(this@HybridActivity, line, tag, quote, object : IImplCallback {
|
|
|
+ override fun onResult(code: Int, result: String) {
|
|
|
+ Logger.d("invokeShare2Fb onResult")
|
|
|
+ if (code == 0) {
|
|
|
+ webView.loadUrl("javascript:wk.FBShareCallback(1)")
|
|
|
+ } else {
|
|
|
+ webView.loadUrl("javascript:wk.FBShareCallback(-1)")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "getRoleInfo" -> {
|
|
|
+ val jsonObject = JSONObject()
|
|
|
+ kotlin.runCatching {
|
|
|
+ jsonObject.put("login_type", SdkBackLoginInfo.instance.loginType)
|
|
|
+ jsonObject.put("uid", SdkBackLoginInfo.instance.userId)
|
|
|
+ jsonObject.put("role_id", SdkBackLoginInfo.instance.currentRoleId)
|
|
|
+ jsonObject.put("role_name", SdkBackLoginInfo.instance.currentRoleName)
|
|
|
+ jsonObject.put("role_level", SdkBackLoginInfo.instance.currentRoleLevel)
|
|
|
+ jsonObject.put("server_id", SdkBackLoginInfo.instance.currentServerId)
|
|
|
+ jsonObject.put("server_name", SdkBackLoginInfo.instance.currentServerName)
|
|
|
+ }
|
|
|
+ return jsonObject.toString()
|
|
|
+ }
|
|
|
}
|
|
|
+ return ""
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -136,6 +191,16 @@ class HybridActivity : Activity(), View.OnClickListener {
|
|
|
|
|
|
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
|
|
|
val hitTestResult = view.hitTestResult
|
|
|
+ // 处理paypal
|
|
|
+ if (url.startsWith("https://www.sandbox.paypal.com")
|
|
|
+ || url.startsWith("https://www.paypal.com")
|
|
|
+ || url.startsWith("intent://")
|
|
|
+ ) {
|
|
|
+ container.setBackgroundColor(Color.parseColor("#FFFFFF"))
|
|
|
+ } else {
|
|
|
+ container.setBackgroundColor(Color.parseColor("#00FFFFFF"))
|
|
|
+ }
|
|
|
+
|
|
|
if (url.startsWith("http:") || url.startsWith("https:")) {
|
|
|
//解决重定向加载的问题 return false
|
|
|
if (!view.canGoBack()) {
|
|
@@ -146,7 +211,11 @@ class HybridActivity : Activity(), View.OnClickListener {
|
|
|
return false
|
|
|
}
|
|
|
view.loadUrl(url)
|
|
|
+ } else {
|
|
|
+ jump2MyCardClient(url)
|
|
|
+ return true
|
|
|
}
|
|
|
+
|
|
|
return false
|
|
|
}
|
|
|
|
|
@@ -170,7 +239,15 @@ class HybridActivity : Activity(), View.OnClickListener {
|
|
|
|
|
|
//For Android > 5.0
|
|
|
override fun onShowFileChooser(webView: WebView, filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: FileChooserParams): Boolean {
|
|
|
-// openFileChooserImplForAndroid5(filePathCallback)
|
|
|
+ openFileChooserImplForAndroid5(filePathCallback)
|
|
|
+// uploadMessageForAndroid5 = filePathCallback
|
|
|
+// mFileChooseParams = fileChooserParams
|
|
|
+// val intent = Intent(Intent.ACTION_GET_CONTENT)
|
|
|
+// intent.addCategory(Intent.CATEGORY_OPENABLE)
|
|
|
+// intent.putExtra("return-data", true)
|
|
|
+// intent.type = "image/*"
|
|
|
+// intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*")
|
|
|
+// startActivityForResult(Intent.createChooser(intent, "选择相册"), FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5)
|
|
|
return true
|
|
|
}
|
|
|
|
|
@@ -192,6 +269,34 @@ class HybridActivity : Activity(), View.OnClickListener {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ override fun onNewIntent(intent: Intent?) {
|
|
|
+ super.onNewIntent(intent)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent) {
|
|
|
+ super.onActivityResult(requestCode, resultCode, intent)
|
|
|
+ if (requestCode == FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5) {
|
|
|
+ Logger.d("onActivityResult FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5")
|
|
|
+ if (uploadMessageForAndroid5 == null) {
|
|
|
+ Logger.d("mUploadMessageForAndroid5 == null")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (intent == null) {
|
|
|
+ uploadMessageForAndroid5!!.onReceiveValue(arrayOf())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ val result = if (resultCode != RESULT_OK) null else intent.data
|
|
|
+ if (result == null) {
|
|
|
+ uploadMessageForAndroid5!!.onReceiveValue(arrayOf())
|
|
|
+ } else {
|
|
|
+ uploadMessageForAndroid5!!.onReceiveValue(arrayOf(result))
|
|
|
+ }
|
|
|
+ uploadMessageForAndroid5 = null
|
|
|
+ } else {
|
|
|
+ ShareImpl.instance.onShareResult(requestCode, resultCode, intent)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
override fun onResume() {
|
|
|
super.onResume()
|
|
|
}
|
|
@@ -217,6 +322,44 @@ class HybridActivity : Activity(), View.OnClickListener {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private fun jump2MyCardClient(url: String) {
|
|
|
+ try {
|
|
|
+ val intent = if (url.startsWith("intent://")
|
|
|
+ || url.startsWith("line://")
|
|
|
+ || url.startsWith("shopeepay://")
|
|
|
+ ) {
|
|
|
+ Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
|
|
|
+ } else {
|
|
|
+ Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
|
|
+ }
|
|
|
+ startActivity(intent)
|
|
|
+ } catch (e: Exception) {
|
|
|
+ e.printStackTrace()
|
|
|
+ Logger.e("${e.message}")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun openFileChooserImplForAndroid5(uploadMsg: ValueCallback<Array<Uri>>) {
|
|
|
+ Logger.i("Open ImageChooser For Higher than Android5")
|
|
|
+ uploadMessageForAndroid5 = uploadMsg
|
|
|
+ val contentSelectionIntent = Intent(Intent.ACTION_GET_CONTENT)
|
|
|
+ contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE)
|
|
|
+ contentSelectionIntent.type = "image/*"
|
|
|
+
|
|
|
+ val chooserIntent = Intent(Intent.ACTION_CHOOSER)
|
|
|
+ chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent)
|
|
|
+ chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser")
|
|
|
+
|
|
|
+ startActivityForResult(chooserIntent, FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onBackPressed() {
|
|
|
+ if (webView.canGoBack()) {
|
|
|
+ webView.goBack()
|
|
|
+ } else {
|
|
|
+ finish()
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
override fun onClick(v: View?) {
|
|
|
v?.apply {
|
|
@@ -228,6 +371,8 @@ class HybridActivity : Activity(), View.OnClickListener {
|
|
|
|
|
|
companion object {
|
|
|
|
|
|
+ private const val FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5 = 2
|
|
|
+
|
|
|
private var url = ""
|
|
|
|
|
|
fun start(activity: Activity, url: String) {
|