MainActivity.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package com.norman.webviewup.demo;
  2. import android.app.Activity;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.text.TextUtils;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.widget.ProgressBar;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. import androidx.appcompat.app.AlertDialog;
  13. import com.norman.webviewup.lib.UpgradeCallback;
  14. import com.norman.webviewup.lib.UpgradeOptions;
  15. import com.norman.webviewup.lib.WebViewUpgrade;
  16. import java.util.Arrays;
  17. import java.util.List;
  18. public class MainActivity extends Activity implements UpgradeCallback {
  19. private static final List<UpgradeInfo> UPGRADE_PACKAGE_LIST = Arrays.asList(
  20. new UpgradeInfo(
  21. "com.google.android.webview",
  22. "122.0.6261.64",
  23. "https://mirror.ghproxy.com/https://raw.githubusercontent.com/JonaNorman/ShareFile/main/com.google.android.webview_122.0.6261.64_armeabi-v7a.zip"),
  24. new UpgradeInfo(
  25. "com.android.webview",
  26. "113.0.5672.136",
  27. "https://mirror.ghproxy.com/https://raw.githubusercontent.com/JonaNorman/ShareFile/main/com.android.webview_113.0.5672.13_armeabi-v7a.zip"),
  28. new UpgradeInfo(
  29. "com.huawei.webview",
  30. "14.0.0.331",
  31. "https://mirror.ghproxy.com/https://raw.githubusercontent.com/JonaNorman/ShareFile/main/com.huawei.webview_14.0.0.331_arm64-v8a_armeabi-v7a.zip")
  32. );
  33. ProgressBar progressBar;
  34. TextView systemWebViewPackageTextView;
  35. TextView upgradeWebViewPackageTextView;
  36. TextView upgradeStatusTextView;
  37. TextView upgradeErrorTextView;
  38. TextView upgradeProgressTextView;
  39. UpgradeInfo selectUpgradeInfo;
  40. protected void onCreate(Bundle savedInstanceState) {
  41. super.onCreate(savedInstanceState);
  42. setContentView(R.layout.activity_main);
  43. WebViewUpgrade.addUpgradeCallback(this);
  44. progressBar = findViewById(R.id.upgradeProgressBar);
  45. systemWebViewPackageTextView = findViewById(R.id.systemWebViewPackageTextView);
  46. upgradeWebViewPackageTextView = findViewById(R.id.upgradeWebViewPackageTextView);
  47. upgradeStatusTextView = findViewById(R.id.upgradeStatusTextView);
  48. upgradeErrorTextView = findViewById(R.id.upgradeErrorTextView);
  49. upgradeProgressTextView =findViewById(R.id.upgradeProgressTextView);
  50. updateSystemWebViewPackageInfo();
  51. updateSystemWebViewPackageInfo();
  52. updateUpgradeWebViewStatus();
  53. findViewById(R.id.upgradeButton).setOnClickListener(new View.OnClickListener() {
  54. @Override
  55. public void onClick(View v) {
  56. if (WebViewUpgrade.isProcessing()) {
  57. Toast.makeText(getApplicationContext(), "webView is being upgraded, please wait", Toast.LENGTH_LONG).show();
  58. } else if (WebViewUpgrade.isCompleted()) {
  59. Toast.makeText(getApplicationContext(), "webView is already upgrade success,not support dynamic switch", Toast.LENGTH_LONG).show();
  60. } else {
  61. showChooseWebViewDialog();
  62. }
  63. }
  64. });
  65. findViewById(R.id.webViewButton).setOnClickListener(new View.OnClickListener() {
  66. @Override
  67. public void onClick(View v) {
  68. startActivity(new Intent(MainActivity.this, WebViewActivity.class));
  69. }
  70. });
  71. }
  72. @Override
  73. protected void onDestroy() {
  74. super.onDestroy();
  75. WebViewUpgrade.removeUpgradeCallback(this);
  76. }
  77. @Override
  78. public void onUpgradeProcess(float percent) {
  79. updateUpgradeWebViewStatus();
  80. }
  81. @Override
  82. public void onUpgradeComplete() {
  83. updateUpgradeWebViewStatus();
  84. Toast.makeText(getApplicationContext(), "webView upgrade success", Toast.LENGTH_SHORT).show();
  85. }
  86. @Override
  87. public void onUpgradeError(Throwable throwable) {
  88. Toast.makeText(getApplicationContext(), "webView upgrade fail", Toast.LENGTH_SHORT).show();
  89. updateUpgradeWebViewStatus();
  90. }
  91. private void showChooseWebViewDialog() {
  92. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  93. builder.setTitle("Choose WebView");
  94. String[] items = new String[UPGRADE_PACKAGE_LIST.size()];
  95. for (int i = 0; i < items.length; i++) {
  96. items[i] = UPGRADE_PACKAGE_LIST.get(i).title;
  97. }
  98. builder.setItems(items, new DialogInterface.OnClickListener() {
  99. @Override
  100. public void onClick(DialogInterface dialog, int which) {
  101. UpgradeInfo upgradeInfo = UPGRADE_PACKAGE_LIST.get(which);
  102. selectUpgradeInfo = upgradeInfo;
  103. UpgradeOptions upgradeOptions = new UpgradeOptions
  104. .Builder(getApplicationContext(),
  105. upgradeInfo.packageName,
  106. upgradeInfo.url,
  107. upgradeInfo.versionName,
  108. new DownloadSinkImpl())
  109. .build();
  110. WebViewUpgrade.upgrade(upgradeOptions);
  111. updateUpgradeWebViewPackageInfo();
  112. updateUpgradeWebViewStatus();
  113. }
  114. });
  115. AlertDialog dialog = builder.create();
  116. dialog.show();
  117. }
  118. private void updateSystemWebViewPackageInfo() {
  119. String systemWebViewPackageName = WebViewUpgrade.getSystemWebViewPackageName();
  120. String systemWebViewPackageVersion = WebViewUpgrade.getSystemWebViewPackageVersion();
  121. String systemWebViewPackageInfo = "unknown";
  122. if (!TextUtils.isEmpty(systemWebViewPackageName)
  123. || !TextUtils.isEmpty(systemWebViewPackageVersion)) {
  124. systemWebViewPackageInfo = (!TextUtils.isEmpty(systemWebViewPackageName) ? systemWebViewPackageName : "unknown")
  125. + ":" + (!TextUtils.isEmpty(systemWebViewPackageVersion) ? systemWebViewPackageVersion : "unknown");
  126. }
  127. systemWebViewPackageTextView.setText(systemWebViewPackageInfo);
  128. }
  129. private void updateUpgradeWebViewPackageInfo() {
  130. String upgradeWebViewPackageName = selectUpgradeInfo!= null?selectUpgradeInfo.packageName:null;
  131. String upgradeWebViewPackageVersion = selectUpgradeInfo!= null?selectUpgradeInfo.versionName:null;
  132. String upgradeWebViewPackageInfo = "";
  133. if (!TextUtils.isEmpty(upgradeWebViewPackageName)
  134. || !TextUtils.isEmpty(upgradeWebViewPackageVersion)) {
  135. upgradeWebViewPackageInfo = (!TextUtils.isEmpty(upgradeWebViewPackageName) ? upgradeWebViewPackageName : "unknown")
  136. + ":" + (!TextUtils.isEmpty(upgradeWebViewPackageVersion) ? upgradeWebViewPackageVersion : "unknown");
  137. }else {
  138. upgradeWebViewPackageInfo = "";
  139. }
  140. upgradeWebViewPackageTextView.setText(upgradeWebViewPackageInfo);
  141. }
  142. private void updateUpgradeWebViewStatus() {
  143. if (WebViewUpgrade.isProcessing()) {
  144. upgradeStatusTextView.setText("upgrading...");
  145. } else if (WebViewUpgrade.isFailed()) {
  146. upgradeStatusTextView.setText("fail");
  147. } else if (WebViewUpgrade.isCompleted()) {
  148. upgradeStatusTextView.setText("complete");
  149. } else if (WebViewUpgrade.isInited()) {
  150. upgradeStatusTextView.setText("init");
  151. } else {
  152. upgradeStatusTextView.setText("");
  153. }
  154. int process = (int) (WebViewUpgrade.getUpgradeProcess() * 100);
  155. progressBar.setProgress(process);
  156. upgradeProgressTextView.setText(process+"%");
  157. Throwable throwable = WebViewUpgrade.getUpgradeError();
  158. if (throwable == null) {
  159. upgradeErrorTextView.setText("");
  160. } else {
  161. upgradeErrorTextView.setText("message:" + throwable.getMessage() + "\nstackTrace:" + Log.getStackTraceString(throwable));
  162. }
  163. }
  164. static class UpgradeInfo {
  165. public UpgradeInfo(String packageName, String versionName, String url) {
  166. this.title = packageName + "\n" + versionName;
  167. this.url = url;
  168. this.packageName = packageName;
  169. this.versionName = versionName;
  170. }
  171. String title;
  172. String url;
  173. String packageName;
  174. String versionName;
  175. }
  176. }