diff --git a/app/src/main/java/one/mixin/android/ui/common/WebBottomSheetDialogFragment.kt b/app/src/main/java/one/mixin/android/ui/common/WebBottomSheetDialogFragment.kt index a64bf50ec5..661d1c69a9 100644 --- a/app/src/main/java/one/mixin/android/ui/common/WebBottomSheetDialogFragment.kt +++ b/app/src/main/java/one/mixin/android/ui/common/WebBottomSheetDialogFragment.kt @@ -5,6 +5,7 @@ import android.app.Activity import android.annotation.SuppressLint import android.app.Dialog import android.content.ActivityNotFoundException +import android.content.Context import android.content.Intent import android.content.Intent.ACTION_VIEW import android.content.Intent.CATEGORY_BROWSABLE @@ -17,6 +18,7 @@ import android.provider.MediaStore import android.view.ViewTreeObserver import android.webkit.CookieManager import android.webkit.GeolocationPermissions +import android.webkit.JavascriptInterface import android.webkit.PermissionRequest import android.webkit.ValueCallback import android.webkit.WebChromeClient @@ -39,6 +41,7 @@ import one.mixin.android.databinding.FragmentWebBottomSheetBinding import one.mixin.android.extension.REQUEST_CAMERA import one.mixin.android.extension.createImageTemp import one.mixin.android.extension.getOtherPath +import one.mixin.android.extension.isCustomerServiceUrl import one.mixin.android.extension.isExternalTransferUrl import one.mixin.android.extension.isLightningUrl import one.mixin.android.extension.isMixinUrl @@ -48,12 +51,15 @@ import one.mixin.android.extension.openPermissionSetting import one.mixin.android.extension.toUri import one.mixin.android.extension.toast import one.mixin.android.extension.withArgs +import one.mixin.android.session.Session import one.mixin.android.ui.conversation.web.PermissionBottomSheetDialogFragment import one.mixin.android.ui.conversation.web.PermissionBottomSheetDialogFragment.Companion.PERMISSION_AUDIO import one.mixin.android.ui.conversation.web.PermissionBottomSheetDialogFragment.Companion.PERMISSION_VIDEO import one.mixin.android.ui.url.UrlInterpreterActivity +import one.mixin.android.ui.web.WebFragment import one.mixin.android.util.rxpermission.RxPermissions import one.mixin.android.util.viewBinding +import one.mixin.android.vo.generateConversationId import one.mixin.android.web3.convertWcLink import one.mixin.android.widget.BottomSheet import timber.log.Timber @@ -181,6 +187,9 @@ class WebBottomSheetDialogFragment : MixinBottomSheetDialogFragment() { } } webViewClient = BottomSheetWebViewClient() + if (isCustomerServiceUrl(this@WebBottomSheetDialogFragment.url)) { + addJavascriptInterface(SupportWebAppInterface(context), "MixinContext") + } setDownloadListener { url, _, _, _, _ -> runCatching { startActivity( @@ -223,6 +232,14 @@ class WebBottomSheetDialogFragment : MixinBottomSheetDialogFragment() { return rect.height() } + class SupportWebAppInterface(private val context: Context) { + @JavascriptInterface + fun getContext(): String? { + val conversationId = Session.getAccountId()?.let { generateConversationId(it, Constants.TEAM_MIXIN_USER_ID) } + return WebFragment.WebAppInterface(context, conversationId, false).getContext() + } + } + override fun onDestroyView() { if (contentView.viewTreeObserver.isAlive) { contentView.viewTreeObserver.removeOnGlobalLayoutListener(keyboardLayoutListener) @@ -230,6 +247,7 @@ class WebBottomSheetDialogFragment : MixinBottomSheetDialogFragment() { bottomSheet = null binding.webView.apply { stopLoading() + removeJavascriptInterface("MixinContext") webChromeClient = null webViewClient = WebViewClient() loadUrl("about:blank")