From 068f5d93a06107b5bbcbcb7a822b8f6be99ae65f Mon Sep 17 00:00:00 2001 From: hwf453 Date: Fri, 29 Mar 2024 16:51:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E5=85=B3=E4=BA=8E=E7=A7=BB=E5=8A=A8=E5=8A=9E=E5=85=AC=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=BA=95=E9=83=A8=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=A1=88?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 4 + .../zhdcoa/base/BaseAgentWebActivity.java | 237 ++++++++++++++++++ .../zhdcoa/ui/activity/AboutMeActivity.kt | 15 +- .../zhdcoa/ui/activity/BeiAnWebActivity.java | 120 +++++++++ .../zhdcoa/ui/activity/LoginActivity.kt | 27 +- .../zhdcoa/ui/activity/XzjhFragment.java | 12 +- app/src/main/res/layout/activity_about_me.xml | 60 +++++ .../main/res/layout/activity_bei_an_web.xml | 33 +++ app/src/main/res/layout/activity_login.xml | 35 ++- 10 files changed, 529 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/com/rehome/zhdcoa/base/BaseAgentWebActivity.java create mode 100644 app/src/main/java/com/rehome/zhdcoa/ui/activity/BeiAnWebActivity.java create mode 100644 app/src/main/res/layout/activity_bei_an_web.xml diff --git a/app/build.gradle b/app/build.gradle index 92c9a7e..0e2098f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,9 @@ dependencies { implementation 'com.tencent.bugly:crashreport:3.2.1' implementation 'com.github.xuexiangjys.SmartRefreshLayout:refresh-header:1.1.5' implementation 'com.github.xuexiangjys.SmartRefreshLayout:refresh-layout:1.1.5' - implementation 'com.just.agentweb:agentweb:4.1.4' + //implementation 'com.just.agentweb:agentweb:4.1.4' + //第三方浏览器 + implementation 'io.github.justson:agentweb-core:v5.1.1-androidx' implementation 'com.lcodecorex:tkrefreshlayout:1.0.7' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30' implementation files('../libs/poi-3.9-20121203.jar') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7bfebf6..8898812 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1025,6 +1025,10 @@ android:name=".ui.activity.BaseWebActivity" android:screenOrientation="landscape" android:windowSoftInputMode="adjustResize|stateHidden" /> + + * source code https://github.com/Justson/AgentWeb + */ + +public abstract class BaseAgentWebActivity extends AppCompatActivity { + + protected AgentWeb mAgentWeb; + private AgentWebUIControllerImplBase mAgentWebUIController; + private ErrorLayoutEntity mErrorLayoutEntity; + private MiddlewareWebChromeBase mMiddleWareWebChrome; + private MiddlewareWebClientBase mMiddleWareWebClient; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public void setContentView(@LayoutRes int layoutResID) { + super.setContentView(layoutResID); + buildAgentWeb(); + } + + @Override + public void setContentView(View view) { + super.setContentView(view); + buildAgentWeb(); + } + + protected void buildAgentWeb() { + ErrorLayoutEntity mErrorLayoutEntity = getErrorLayoutEntity(); + mAgentWeb = AgentWeb.with(this) + .setAgentWebParent(getAgentWebParent(), new ViewGroup.LayoutParams(-1, -1)) + .useDefaultIndicator(getIndicatorColor(), getIndicatorHeight()) + .setWebChromeClient(getWebChromeClient()) + .setWebViewClient(getWebViewClient()) + .setWebView(getWebView()) + .setPermissionInterceptor(getPermissionInterceptor()) + .setWebLayout(getWebLayout()) + .setAgentWebUIController(getAgentWebUIController()) + .interceptUnkownUrl() + .setOpenOtherPageWays(getOpenOtherAppWay()) + .useMiddlewareWebChrome(getMiddleWareWebChrome()) + .useMiddlewareWebClient(getMiddleWareWebClient()) + .setAgentWebWebSettings(getAgentWebSettings()) + .setMainFrameErrorView(mErrorLayoutEntity.layoutRes, mErrorLayoutEntity.reloadId) + .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) + .createAgentWeb() + .ready() + .go(getUrl()); + + + } + + + protected @NonNull + ErrorLayoutEntity getErrorLayoutEntity() { + if (this.mErrorLayoutEntity == null) { + this.mErrorLayoutEntity = new ErrorLayoutEntity(); + } + return mErrorLayoutEntity; + } + + protected AgentWeb getAgentWeb() { + return this.mAgentWeb; + } + + + protected static class ErrorLayoutEntity { + private int layoutRes = com.just.agentweb.R.layout.agentweb_error_page; + private int reloadId; + + public void setLayoutRes(int layoutRes) { + this.layoutRes = layoutRes; + if (layoutRes <= 0) { + layoutRes = -1; + } + } + + public void setReloadId(int reloadId) { + this.reloadId = reloadId; + if (reloadId <= 0) { + reloadId = -1; + } + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + + if (mAgentWeb != null && mAgentWeb.handleKeyEvent(keyCode, event)) { + return true; + } + return super.onKeyDown(keyCode, event); + } + + @Override + protected void onPause() { + if (mAgentWeb != null) { + mAgentWeb.getWebLifeCycle().onPause(); + } + super.onPause(); + + } + + @Override + protected void onResume() { + if (mAgentWeb != null) { + mAgentWeb.getWebLifeCycle().onResume(); + } + super.onResume(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + } + + + @Override + protected void onDestroy() { + if (mAgentWeb != null) { + mAgentWeb.getWebLifeCycle().onDestroy(); + } + super.onDestroy(); + } + + + protected + @Nullable + String getUrl() { + return null; + } + + public @Nullable + IAgentWebSettings getAgentWebSettings() { + return AgentWebSettingsImpl.getInstance(); + } + + protected abstract @NonNull + ViewGroup getAgentWebParent(); + + protected @Nullable + WebChromeClient getWebChromeClient() { + return null; + } + + protected @ColorInt + int getIndicatorColor() { + return -1; + } + + protected int getIndicatorHeight() { + return -1; + } + + protected @Nullable + WebViewClient getWebViewClient() { + return null; + } + + + protected @Nullable + WebView getWebView() { + return null; + } + + protected @Nullable + IWebLayout getWebLayout() { + return null; + } + + protected @Nullable + PermissionInterceptor getPermissionInterceptor() { + return null; + } + + public @Nullable + AgentWebUIControllerImplBase getAgentWebUIController() { + return null; + } + + public @Nullable + DefaultWebClient.OpenOtherPageWays getOpenOtherAppWay() { + return null; + } + + protected @NonNull + MiddlewareWebChromeBase getMiddleWareWebChrome() { + return this.mMiddleWareWebChrome = new MiddlewareWebChromeBase() { + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + setTitle(view, title); + } + }; + } + + protected void setTitle(WebView view, String title) { + + } + + protected @NonNull + MiddlewareWebClientBase getMiddleWareWebClient() { + return this.mMiddleWareWebClient = new MiddlewareWebClientBase() { + }; + } +} diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/AboutMeActivity.kt b/app/src/main/java/com/rehome/zhdcoa/ui/activity/AboutMeActivity.kt index bb21a74..e4220a7 100644 --- a/app/src/main/java/com/rehome/zhdcoa/ui/activity/AboutMeActivity.kt +++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/AboutMeActivity.kt @@ -3,6 +3,7 @@ package com.rehome.zhdcoa.ui.activity import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.View import com.rehome.zhdcoa.R import com.rehome.zhdcoa.base.BaseActivityOaToolbarViewBinding import com.rehome.zhdcoa.databinding.ActivityAboutMeBinding @@ -20,24 +21,36 @@ class AboutMeActivity : BaseActivityOaToolbarViewBinding binding.tvServiceAgreement.setOnClickListener { val intent = Intent(this, ServiceAgreementActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) startActivity(intent) } binding.tvPrivacy.setOnClickListener { val intent = Intent(this, PrivacyAgreementActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) startActivity(intent) } binding.tvPrivateInfo.setOnClickListener { val intent = Intent(this, CollectPrivateInfoActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) startActivity(intent) } binding.tvThirdShareList.setOnClickListener { val intent = Intent(this, ThirdShareListActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) startActivity(intent) } - + binding.tvBeiAn.setOnClickListener(View.OnClickListener { + val intent = Intent( + this, + BeiAnWebActivity::class.java + ) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) + intent.putExtra("beiAnNo",binding.tvBeiAn.text.toString()); + startActivity(intent) + }) } override fun initData() { diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/BeiAnWebActivity.java b/app/src/main/java/com/rehome/zhdcoa/ui/activity/BeiAnWebActivity.java new file mode 100644 index 0000000..dce53fd --- /dev/null +++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/BeiAnWebActivity.java @@ -0,0 +1,120 @@ +package com.rehome.zhdcoa.ui.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.os.Bundle; +import android.view.KeyEvent; +import android.webkit.WebResourceRequest; +import android.webkit.WebView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.just.agentweb.AgentWeb; +import com.just.agentweb.DefaultWebClient; +import com.just.agentweb.WebChromeClient; +import com.just.agentweb.WebViewClient; +import com.rehome.zhdcoa.R; +import com.rehome.zhdcoa.weiget.WebLayout; + +public class BeiAnWebActivity extends AppCompatActivity { + protected AgentWeb mAgentWeb; + private LinearLayout mLinearLayout; + private Toolbar mToolbar; + private TextView mTitleTextView; + private AlertDialog mAlertDialog; + private Intent intent; + private String beiAnNo; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_bei_an_web); + mLinearLayout = this.findViewById(R.id.container); + mToolbar = this.findViewById(R.id.toolbar); + mToolbar.setTitleTextColor(Color.WHITE); + mToolbar.setTitle(""); + mTitleTextView = this.findViewById(R.id.toolbar_title); + this.setSupportActionBar(mToolbar); + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + mToolbar.setNavigationOnClickListener(v -> BeiAnWebActivity.this.finish()); + intent = getIntent(); + beiAnNo = intent.getStringExtra("beiAnNo"); + + mAgentWeb = AgentWeb.with(this) + .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1)) + .useDefaultIndicator() + .setWebChromeClient(mWebChromeClient) + .setWebViewClient(mWebViewClient) + .setMainFrameErrorView(com.just.agentweb.R.layout.agentweb_error_page, -1) + .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) + .setWebLayout(new WebLayout(this)) + .setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时,弹窗咨询用户是否前往其他应用 + .interceptUnkownUrl() //拦截找不到相关页面的Scheme + .createAgentWeb() + .ready() + .go(getUrl()); + } + + private final com.just.agentweb.WebViewClient mWebViewClient = new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + return super.shouldOverrideUrlLoading(view, request); + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + } + }; + private final com.just.agentweb.WebChromeClient mWebChromeClient = new WebChromeClient() { + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + if (mTitleTextView != null) { + mTitleTextView.setText("ICP备案"); + } + } + }; + + public String getUrl() { + return "https://beian.miit.gov.cn"; + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (mAgentWeb.handleKeyEvent(keyCode, event)) { + return true; + } + return super.onKeyDown(keyCode, event); + } + + @Override + protected void onPause() { + mAgentWeb.getWebLifeCycle().onPause(); + super.onPause(); + } + + @Override + protected void onResume() { + mAgentWeb.getWebLifeCycle().onResume(); + super.onResume(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mAgentWeb.getWebLifeCycle().onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt b/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt index 71ba63f..9348166 100644 --- a/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt +++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/LoginActivity.kt @@ -1,10 +1,6 @@ package com.rehome.zhdcoa.ui.activity -//import com.yanzhenjie.permission.AndPermission -//import com.yanzhenjie.permission.runtime.Permission - - import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.annotation.SuppressLint @@ -19,8 +15,6 @@ import android.provider.Settings import android.text.TextUtils import android.util.Log import android.view.View -import android.view.animation.AccelerateDecelerateInterpolator -import android.widget.CheckBox import android.widget.CompoundButton import android.widget.RadioGroup import android.widget.Toast @@ -39,8 +33,6 @@ import com.xiaomi.mipush.sdk.MiPushClient import com.yolanda.nohttp.NoHttp import com.yolanda.nohttp.RequestMethod import com.yolanda.nohttp.rest.Response -import java.io.File -import java.util.Objects class LoginActivity : BaseActivityOaToolbarViewBinding() { @@ -188,8 +180,8 @@ class LoginActivity : BaseActivityOaToolbarViewBinding() { if (BuildConfig.LOG_ERROR) { // 管理员 -// binding.etUsername.setText("ZHPS_Admin") -// binding.etPassword.setText("Rehome.zhps@996") + binding.etUsername.setText("ZHPS_Admin") + binding.etPassword.setText("Rehome.zhps@996") // binding.etUsername.setText("310386") // binding.etPassword.setText("Zhps$cc0386") @@ -200,6 +192,9 @@ class LoginActivity : BaseActivityOaToolbarViewBinding() { //陈坚标 // binding.etUsername.setText("310063") // binding.etPassword.setText("ZHPs@040909") +// binding.etUsername.setText("310707") +// binding.etPassword.setText("Wxfnz666#") + } @@ -212,6 +207,17 @@ class LoginActivity : BaseActivityOaToolbarViewBinding() { startActivity(intent) }) + binding.tvBeiAn.setOnClickListener(View.OnClickListener { + val intent = Intent( + this, + BeiAnWebActivity::class.java + ) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) + intent.putExtra("beiAnNo",binding.tvBeiAn.text.toString()); + startActivity(intent) + }) + + binding.btnLogin.setOnClickListener(View.OnClickListener { if (TextUtils.isEmpty(binding.etUsername.text.toString())) { toastviewbymyself.makeText(context, "用户名不能为空", Toast.LENGTH_LONG).show() @@ -289,6 +295,7 @@ class LoginActivity : BaseActivityOaToolbarViewBinding() { val request = NoHttp.createStringRequest(url, RequestMethod.POST) request.setDefineRequestBodyForJson(json) + showLog(url) NohttpUtils.getInstance().add(this, 0, request, object : HttpListener { override fun onSucceed(what: Int, response: Response?) { val jsonResult = response?.get() diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/XzjhFragment.java b/app/src/main/java/com/rehome/zhdcoa/ui/activity/XzjhFragment.java index 333e276..df54471 100644 --- a/app/src/main/java/com/rehome/zhdcoa/ui/activity/XzjhFragment.java +++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/XzjhFragment.java @@ -295,9 +295,12 @@ public class XzjhFragment extends BaseFragment { //用来捕获数据解析的异常 try { + String result = response.get(); + showLog(String.valueOf(what)); + showLog(result); switch (what) { case 0: - list = GsonUtils.GsonToBean(response.get(), DjjhList.class); + list = GsonUtils.GsonToBean(result, DjjhList.class); if (list != null) { if (list.getTotal() != 0) { djjhs.clear(); @@ -312,7 +315,7 @@ public class XzjhFragment extends BaseFragment { case 1: ++requestCount; rwlist = null; - rwlist = GsonUtils.GsonToBean(response.get(), DjjhRwList.class); + rwlist = GsonUtils.GsonToBean(result, DjjhRwList.class); //保存数据 if (rwlist != null) { //saveDownData(qylists, qys, requestCount - 1); @@ -331,7 +334,7 @@ public class XzjhFragment extends BaseFragment { case 2: ++requestCount; - AjhjhxzrwList list = GsonUtils.GsonToBean(response.get(), AjhjhxzrwList.class); + AjhjhxzrwList list = GsonUtils.GsonToBean(result, AjhjhxzrwList.class); if (list != null) { if (list.getTotal() != 0) { rwqys.clear(); @@ -351,7 +354,7 @@ public class XzjhFragment extends BaseFragment { break; case 9: - ZyInfo info = GsonUtils.GsonToBean(response.get(), ZyInfo.class); + ZyInfo info = GsonUtils.GsonToBean(result, ZyInfo.class); if (info != null) { if (DataSupport.count("zy") != 0) { DataSupport.deleteAll(Zy.class); @@ -395,6 +398,7 @@ public class XzjhFragment extends BaseFragment { @Override public void onFailed(int what, Response response) { + showLog("onFailed"); if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } diff --git a/app/src/main/res/layout/activity_about_me.xml b/app/src/main/res/layout/activity_about_me.xml index c1b10af..3cee99d 100644 --- a/app/src/main/res/layout/activity_about_me.xml +++ b/app/src/main/res/layout/activity_about_me.xml @@ -82,4 +82,64 @@ android:textSize="30px" /> + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_bei_an_web.xml b/app/src/main/res/layout/activity_bei_an_web.xml new file mode 100644 index 0000000..10f10e9 --- /dev/null +++ b/app/src/main/res/layout/activity_bei_an_web.xml @@ -0,0 +1,33 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 3eb8dd4..cb0f228 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -172,7 +172,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" - android:layout_marginBottom="50dp" + android:layout_marginBottom="80dp" android:orientation="horizontal"> + + + + + + + \ No newline at end of file