提交 8e5c3047 编写于 作者: F fancy

扫描内部页面,支持内部打开,比如工作页面和内容管理页面

上级 0be3b54a
......@@ -535,57 +535,45 @@ class CMSWebViewActivity : BaseMVPActivity<CMSWebViewContract.View, CMSWebViewCo
/**
* 表单加载完成后回调
*/
@Deprecated("已经弃用")
@JavascriptInterface
fun cmsFormLoaded(control: String) {
//{
// "allowRead": true,
// "allowPublishDocument": isControl && this.document.docStatus === "draft",
// "allowSave": isControl && this.document.docStatus === "published",
// "allowPopularDocument": false,
// "allowEditDocument": isControl && !this.document.wf_workId,
// "allowDeleteDocument": isControl && !this.document.wf_workId,
// "allowArchiveDocument" : false,
// "allowRedraftDocument" : false,
// "currentMode": "read" //edit 编辑表单还是阅读表单
// };
XLog.debug("表单加载完成回调:$control")
if (!TextUtils.isEmpty(control)) {
try {
val cmsWorkControl = O2SDKManager.instance().gson.fromJson(control, CMSWorkControl::class.java)
runOnUiThread {
var i = 0
if (cmsWorkControl.allowDeleteDocument) {
tv_cms_form_delete_btn.visible()
i++
}
if (cmsWorkControl.allowPublishDocument) {
tv_cms_form_publish_btn.visible()
i++
}else {
if (cmsWorkControl.allowEditDocument && cmsWorkControl.allowSave) {
if (cmsWorkControl.currentMode == "read") {
tv_cms_form_edit_btn.visible()
tv_cms_form_save_btn.gone()
}else if (cmsWorkControl.currentMode == "edit") {
tv_cms_form_edit_btn.gone()
tv_cms_form_save_btn.visible()
}
i++
}else {
tv_cms_form_edit_btn.gone()
tv_cms_form_save_btn.gone()
}
}
if (i>0) {
fl_bottom_operation_bar.visible()
bottom_operate_button_layout.visible()
}
}
} catch (e: Exception) {
XLog.error("json parse error", e)
}
}
// if (!TextUtils.isEmpty(control)) {
// try {
// val cmsWorkControl = O2SDKManager.instance().gson.fromJson(control, CMSWorkControl::class.java)
// runOnUiThread {
// var i = 0
// if (cmsWorkControl.allowDeleteDocument) {
// tv_cms_form_delete_btn.visible()
// i++
// }
// if (cmsWorkControl.allowPublishDocument) {
// tv_cms_form_publish_btn.visible()
// i++
// }else {
// if (cmsWorkControl.allowEditDocument && cmsWorkControl.allowSave) {
// if (cmsWorkControl.currentMode == "read") {
// tv_cms_form_edit_btn.visible()
// tv_cms_form_save_btn.gone()
// }else if (cmsWorkControl.currentMode == "edit") {
// tv_cms_form_edit_btn.gone()
// tv_cms_form_save_btn.visible()
// }
// i++
// }else {
// tv_cms_form_edit_btn.gone()
// tv_cms_form_save_btn.gone()
// }
// }
// if (i>0) {
// fl_bottom_operation_bar.visible()
// bottom_operate_button_layout.visible()
// }
// }
// } catch (e: Exception) {
// XLog.error("json parse error", e)
// }
// }
}
......
package net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.o2.scanlogin
import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
import com.google.gson.reflect.TypeToken
import kotlinx.android.synthetic.main.activity_scan_login.*
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.O2SDKManager
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.R
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.base.BaseMVPActivity
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.core.component.api.RetrofitClient
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.cms.view.CMSWebViewActivity
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.o2.webview.O2WebViewActivity
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.o2.webview.TaskWebViewActivity
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.core.component.api.APIAddressHelper
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.AndroidUtils
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.StringUtil
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.XLog
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.XToast
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.extension.goThenKill
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.extension.gone
import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.extension.visible
import okhttp3.Call
import okhttp3.Callback
import okhttp3.Request
import okhttp3.Response
import java.io.IOException
import java.util.regex.Matcher
import java.util.regex.Pattern
......@@ -45,7 +47,7 @@ class ScanLoginActivity : BaseMVPActivity<ScanLoginContract.View, ScanLoginContr
XLog.debug("scan result: $result")
parseResult()
setupToolBar(title)
setupToolBar(title, true)
button_scan_login_confirm.setOnClickListener{ mPresenter.confirmWebLogin(meta) }
tv_scan_login_cancel.setOnClickListener { finish() }
}
......@@ -143,8 +145,83 @@ class ScanLoginActivity : BaseMVPActivity<ScanLoginContract.View, ScanLoginContr
}
private fun gotoDefaultBrowser() {
AndroidUtils.runDefaultBrowser(this, result)
finish()
val host = APIAddressHelper.instance().webServerData?.host ?: ""
if (!TextUtils.isEmpty(host) && result.contains(host)) { // 内部页面
XLog.info("内部页面:$result")
// cms页面
if (result.contains("x_desktop/cmspreview.html")
|| result.contains("x_desktop/cmsdoc.html")
|| result.contains("x_desktop/cmsdocMobile.html")
|| result.contains("x_desktop/cmsdocmobilewithaction.html")) {
val uri: Uri = Uri.parse(result)
var documentId = uri.getQueryParameter("documentId")
val readonly = uri.getQueryParameter("readonly") ?: false
if (TextUtils.isEmpty(documentId)) {
documentId = uri.getQueryParameter("id")
}
if (!TextUtils.isEmpty(documentId)) {
goThenKill<CMSWebViewActivity>(CMSWebViewActivity.startBundleDataWithOptions(documentId!!, "", "{ \"readonly\": $readonly }"))
return
}
} else if (result.contains("x_desktop/work.html")
|| result.contains("x_desktop/workmobile.html")
|| result.contains("x_desktop/workmobilewithaction.html")) {
val uri: Uri = Uri.parse(result)
var workId = uri.getQueryParameter("workId")
if (TextUtils.isEmpty(workId)) {
workId = uri.getQueryParameter("workid")
}
if (TextUtils.isEmpty(workId)) {
workId = uri.getQueryParameter("work")
}
if (TextUtils.isEmpty(workId)) {
workId = uri.getQueryParameter("workcompletedid")
}
if (TextUtils.isEmpty(workId)) {
workId = uri.getQueryParameter("workcompletedId")
}
if (TextUtils.isEmpty(workId)) {
workId = uri.getQueryParameter("id")
}
if (!TextUtils.isEmpty(workId)) {
goThenKill<TaskWebViewActivity>(TaskWebViewActivity.start(workId, "", ""))
return
}
} else if (result.contains("x_desktop/app.html")
|| result.contains("x_desktop/appMobile.html")) {
val uri: Uri = Uri.parse(result)
val app = uri.getQueryParameter("app")
val status = uri.getQueryParameter("status")
if (!TextUtils.isEmpty(app) && !TextUtils.isEmpty(status)) {
XLog.info("app: $app status: $status")
val type = object : TypeToken<HashMap<String, String>>() {}.type
val statusMap: HashMap<String, String> = O2SDKManager.instance().gson.fromJson(status, type)
if (app == "process.Work") {
var work = statusMap["workId"]
if (TextUtils.isEmpty(work)) {
work = statusMap["workCompletedId"]
}
if (!TextUtils.isEmpty(work)) {
goThenKill<TaskWebViewActivity>(TaskWebViewActivity.start(work, "", ""))
return
}
} else if (app == "cms.Document") {
val documentId = statusMap["documentId"]
val readonly = statusMap["readonly"] ?: false
if (!TextUtils.isEmpty(documentId)) {
goThenKill<CMSWebViewActivity>(CMSWebViewActivity.startBundleDataWithOptions(documentId!!, "", "{ \"readonly\": $readonly }"))
return
}
}
}
}
XLog.info("没有处理完成,默认webview中打开")
O2WebViewActivity.openWebView(this, "", result)
} else {
XLog.info("外部页面:$result")
AndroidUtils.runDefaultBrowser(this, result)
finish()
}
}
private fun parseMeta() {
......
......@@ -35,18 +35,19 @@ class O2WebViewActivity : AppCompatActivity() {
setContentView(R.layout.activity_o2_web_view)
val title = intent?.extras?.getString(TitleKey) ?: "网页"
val url = intent?.extras?.getString(UrlKey) ?: "https://www.o2oa.net"
// actionbar
val toolbar: Toolbar? = findViewById(R.id.toolbar_snippet_top_bar)
toolbar?.title = ""
setSupportActionBar(toolbar)
val toolbarTitle: TextView? = findViewById(R.id.tv_snippet_top_title)
toolbarTitle?.text = title
updateToolbarTitle(title)
toolbar?.setNavigationIcon(R.mipmap.ic_back_mtrl_white_alpha)
toolbar?.setNavigationOnClickListener { finish() }
//webivew
web_view.webChromeClient = webChromeClient
webChromeClient.onO2ReceivedTitle = { t ->
updateToolbarTitle(t)
}
web_view.webViewClient = object : WebViewClient() {
override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
XLog.error("ssl error, $error")
......@@ -62,4 +63,9 @@ class O2WebViewActivity : AppCompatActivity() {
web_view.loadUrl(url)
}
fun updateToolbarTitle(title: String) {
val toolbarTitle: TextView? = findViewById(R.id.tv_snippet_top_title)
toolbarTitle?.text = title
}
}
\ No newline at end of file
......@@ -49,7 +49,8 @@ public class StringUtil {
*/
public static boolean isUrl(String str) {
// String regex = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
String regex = "((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
// String regex = "((http|ftp|https)://)(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})*(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
String regex = "^(http(s)?:\\/\\/)\\w+[^\\s]+(\\.[^\\s]+){1,}$";
return match(regex, str);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册