You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.5 KiB
Kotlin
111 lines
3.5 KiB
Kotlin
package com.idormy.sms.forwarder.core.webview
|
|
|
|
import android.content.Context
|
|
import android.content.DialogInterface
|
|
import android.content.Intent
|
|
import android.net.Uri
|
|
import android.os.Bundle
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import com.idormy.sms.forwarder.R
|
|
import com.idormy.sms.forwarder.utils.XToastUtils
|
|
import com.xuexiang.xui.utils.ResUtils
|
|
import com.xuexiang.xui.widget.dialog.DialogLoader
|
|
import com.xuexiang.xutil.XUtil
|
|
import com.xuexiang.xutil.app.ActivityUtils
|
|
import java.net.URISyntaxException
|
|
|
|
/**
|
|
* WebView拦截提示
|
|
*
|
|
* @author xuexiang
|
|
* @since 2019-10-21 9:51
|
|
*/
|
|
class WebViewInterceptDialog : AppCompatActivity(), DialogInterface.OnDismissListener {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
val url = intent.getStringExtra(KEY_INTERCEPT_URL).toString()
|
|
DialogLoader.getInstance().showConfirmDialog(
|
|
this,
|
|
getOpenTitle(url),
|
|
ResUtils.getString(R.string.lab_yes),
|
|
{ dialog: DialogInterface, _: Int ->
|
|
dialog.dismiss()
|
|
if (isAppLink(url)) {
|
|
openAppLink(this, url)
|
|
} else {
|
|
openApp(url)
|
|
}
|
|
},
|
|
ResUtils.getString(R.string.lab_no)
|
|
) { dialog: DialogInterface, _: Int -> dialog.dismiss() }.setOnDismissListener(this)
|
|
}
|
|
|
|
private fun getOpenTitle(url: String): String {
|
|
val scheme = getScheme(url)
|
|
return if ("mqqopensdkapi" == scheme) {
|
|
"是否允许页面打开\"QQ\"?"
|
|
} else {
|
|
ResUtils.getString(R.string.lab_open_third_app)
|
|
}
|
|
}
|
|
|
|
private fun getScheme(url: String): String? {
|
|
try {
|
|
val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
|
|
return intent.scheme
|
|
} catch (e: URISyntaxException) {
|
|
e.printStackTrace()
|
|
}
|
|
return ""
|
|
}
|
|
|
|
private fun isAppLink(url: String): Boolean {
|
|
val uri = Uri.parse(url)
|
|
return uri != null && APP_LINK_HOST == uri.host && (url.startsWith("http") || url.startsWith(
|
|
"https"
|
|
))
|
|
}
|
|
|
|
private fun openApp(url: String) {
|
|
val intent: Intent
|
|
try {
|
|
intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
|
XUtil.getContext().startActivity(intent)
|
|
} catch (e: Exception) {
|
|
XToastUtils.error(getString(R.string.third_party_app_not_installed))
|
|
}
|
|
}
|
|
|
|
private fun openAppLink(context: Context, url: String) {
|
|
try {
|
|
val intent = Intent(APP_LINK_ACTION)
|
|
intent.data = Uri.parse(url)
|
|
context.startActivity(intent)
|
|
} catch (e: Exception) {
|
|
XToastUtils.error(getString(R.string.third_party_app_not_installed))
|
|
}
|
|
}
|
|
|
|
override fun onDismiss(dialog: DialogInterface) {
|
|
finish()
|
|
}
|
|
|
|
companion object {
|
|
private const val KEY_INTERCEPT_URL = "key_intercept_url"
|
|
|
|
// TODO: 2019-10-30 这里修改你的applink
|
|
const val APP_LINK_HOST = "xuexiangjys.club"
|
|
const val APP_LINK_ACTION = "com.xuexiang.xui.applink"
|
|
|
|
/**
|
|
* 显示WebView拦截提示
|
|
*
|
|
* @param url 需要拦截处理的url
|
|
*/
|
|
@JvmStatic
|
|
fun show(url: String?) {
|
|
ActivityUtils.startActivity(WebViewInterceptDialog::class.java, KEY_INTERCEPT_URL, url)
|
|
}
|
|
}
|
|
} |