CustomerServiceActivity.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package com.datarecovery.master.module.customerservice;
  2. import android.annotation.SuppressLint;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.net.Uri;
  7. import android.os.Bundle;
  8. import android.text.TextUtils;
  9. import android.webkit.WebChromeClient;
  10. import android.webkit.WebResourceRequest;
  11. import android.webkit.WebSettings;
  12. import android.webkit.WebView;
  13. import android.webkit.WebViewClient;
  14. import androidx.annotation.NonNull;
  15. import androidx.annotation.Nullable;
  16. import com.atmob.app.lib.base.BaseActivity;
  17. import com.atmob.common.runtime.ActivityUtil;
  18. import com.datarecovery.master.databinding.ActivityCustomerServiceBinding;
  19. import com.datarecovery.master.dialog.CommonLoadingDialog;
  20. import com.datarecovery.master.module.main.MainActivity;
  21. import com.datarecovery.master.utils.ActivityUtilHelper;
  22. import com.datarecovery.master.utils.AndroidBug5497Workaround;
  23. import com.datarecovery.master.utils.BoxingUtil;
  24. import com.gyf.immersionbar.ImmersionBar;
  25. import dagger.hilt.android.AndroidEntryPoint;
  26. @AndroidEntryPoint
  27. public class CustomerServiceActivity extends BaseActivity<ActivityCustomerServiceBinding> {
  28. private CustomerServiceViewModel customerServiceViewModel;
  29. private CommonLoadingDialog loadingDialog;
  30. public static void start(Context context) {
  31. Intent intent = new Intent(context, CustomerServiceActivity.class);
  32. if (!(context instanceof Activity)) {
  33. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  34. }
  35. context.startActivity(intent);
  36. }
  37. @Override
  38. protected void configImmersion(@NonNull ImmersionBar immersionBar) {
  39. immersionBar.statusBarDarkFont(true);
  40. }
  41. @Override
  42. protected void onCreate(@Nullable Bundle savedInstanceState) {
  43. super.onCreate(savedInstanceState);
  44. initView();
  45. initObserver();
  46. AndroidBug5497Workaround.assistActivity(this);
  47. }
  48. @Override
  49. protected boolean shouldImmersion() {
  50. return true;
  51. }
  52. @Override
  53. protected void initViewModel() {
  54. customerServiceViewModel = getViewModelProvider().get(CustomerServiceViewModel.class);
  55. binding.setCustomerViewModel(customerServiceViewModel);
  56. }
  57. private void initView() {
  58. addTopStatusBarHeight(binding.browserHeader);
  59. initWebView();
  60. }
  61. private void initObserver() {
  62. customerServiceViewModel.getCustomerUrl().observe(this, this::loadCustomerUrl);
  63. customerServiceViewModel.getShowLoading().observe(this, this::showLoadingDialog);
  64. customerServiceViewModel.getOnFinishEvent().observe(this, o -> onBackPressed());
  65. }
  66. @Override
  67. public void onBackPressed() {
  68. Activity activity = null;
  69. if (ActivityUtil.getActivityCount() >= 2 && (activity = ActivityUtilHelper.getActivity(ActivityUtilHelper.getActivityCount() - 2)) != null && !(activity instanceof MainActivity)) {
  70. startActivity(new Intent(this, activity.getClass()));
  71. } else {
  72. MainActivity.start(this);
  73. }
  74. }
  75. @Override
  76. protected void onResume() {
  77. super.onResume();
  78. customerServiceViewModel.checkCustomerUrl();
  79. }
  80. public void showLoadingDialog(Boolean show) {
  81. if (BoxingUtil.boxing(show)) {
  82. if (loadingDialog == null) {
  83. loadingDialog = new CommonLoadingDialog(this);
  84. }
  85. loadingDialog.show();
  86. } else {
  87. if (loadingDialog != null) {
  88. loadingDialog.dismiss();
  89. }
  90. }
  91. }
  92. @SuppressLint("SetJavaScriptEnabled")
  93. private void initWebView() {
  94. WebSettings settings = binding.browserWebView.getSettings();
  95. settings.setUseWideViewPort(true);
  96. settings.setLoadWithOverviewMode(true);
  97. settings.setJavaScriptEnabled(true);
  98. settings.setDomStorageEnabled(true);
  99. settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
  100. settings.setLoadsImagesAutomatically(true);
  101. settings.setMediaPlaybackRequiresUserGesture(true);
  102. settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
  103. settings.setAllowFileAccess(true);
  104. settings.setJavaScriptCanOpenWindowsAutomatically(true);
  105. settings.setDefaultTextEncodingName("utf-8");
  106. settings.setAllowContentAccess(true);
  107. settings.setAllowFileAccessFromFileURLs(true);
  108. binding.browserWebView.setWebViewClient(new WebViewClient() {
  109. @Override
  110. public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
  111. String url = request.getUrl().toString();
  112. if (url.startsWith("http://") || url.startsWith("https://")) {
  113. binding.browserWebView.loadUrl(url);
  114. return false;
  115. } else {
  116. Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
  117. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  118. startActivity(intent);
  119. return true;
  120. }
  121. }
  122. });
  123. binding.browserWebView.setWebChromeClient(new WebChromeClient() {
  124. @Override
  125. public void onReceivedTitle(WebView view, String title) {
  126. super.onReceivedTitle(view, title);
  127. customerServiceViewModel.setWebTitle(title);
  128. }
  129. });
  130. }
  131. @Override
  132. protected void onNewIntent(Intent intent) {
  133. super.onNewIntent(intent);
  134. }
  135. private void loadCustomerUrl(String url) {
  136. if (TextUtils.isEmpty(url)) {
  137. return;
  138. }
  139. if (isUrl(url)) {
  140. binding.browserWebView.loadUrl(url);
  141. } else {
  142. try {
  143. Uri uri = Uri.parse(url);
  144. startActivity(new Intent(Intent.ACTION_VIEW, uri));
  145. } catch (Exception e) {
  146. e.printStackTrace();
  147. }
  148. finish();
  149. }
  150. }
  151. public boolean isUrl(String str) {
  152. if (TextUtils.isEmpty(str)) {
  153. return false;
  154. }
  155. String upperCaseStr = str.toUpperCase();
  156. return upperCaseStr.startsWith("HTTP://") || upperCaseStr.startsWith("HTTPS://");
  157. }
  158. }