kunfei 3 лет назад
Родитель
Сommit
fcd5cef265
2 измененных файлов с 84 добавлено и 1 удалено
  1. 83 0
      app/src/androidTest/java/io/legado/app/HttpTest.kt
  2. 1 1
      build.gradle

+ 83 - 0
app/src/androidTest/java/io/legado/app/HttpTest.kt

@@ -0,0 +1,83 @@
+package io.legado.app
+
+import android.app.DownloadManager
+import android.net.Uri
+import android.os.Environment
+import android.webkit.WebSettings
+import android.webkit.WebView
+import io.legado.app.help.config.AppConfig
+import io.legado.app.utils.runOnUI
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
+import org.junit.Test
+import splitties.init.appCtx
+import splitties.systemservices.downloadManager
+
+class HttpTest {
+
+    @Test
+    fun test() {
+        webViewDownloadTest()
+    }
+
+    private fun webViewDownloadTest() {
+        runOnUI {
+            val webView = WebView(appCtx)
+            val settings = webView.settings
+            settings.javaScriptEnabled = true
+            settings.domStorageEnabled = true
+            settings.blockNetworkImage = true
+            settings.userAgentString = AppConfig.userAgent
+            settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
+            webView.setDownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
+                print(url)
+                webView.destroy()
+            }
+            webView.loadUrl("https://gj.legado.cc/legado/?url=https://miaogongzi.lanzout.com/iITmP0s7y26d&type=down")
+        }
+    }
+
+    private fun downloadManagerTest() {
+        runBlocking {
+            val request =
+                DownloadManager.Request(Uri.parse("https://gj.legado.cc/legado/?url=https://miaogongzi.lanzout.com/iITmP0s7y26d&type=down"))
+            // 设置通知
+            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN)
+            // 设置下载文件保存的路径和文件名
+            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "test.txt")
+            // 添加一个下载任务
+            val downloadId = downloadManager.enqueue(request)
+            val query = DownloadManager.Query()
+            query.setFilterById(downloadId)
+            repeat(30) {
+                downloadManager.query(query).use { cursor ->
+                    if (cursor.moveToFirst()) {
+                        val progressIndex =
+                            cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)
+                        val fileSizeIndex =
+                            cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)
+                        val statusIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)
+                        val progress = cursor.getInt(progressIndex)
+                        val max = cursor.getInt(fileSizeIndex)
+                        val status = when (cursor.getInt(statusIndex)) {
+                            DownloadManager.STATUS_PAUSED -> appCtx.getString(R.string.pause)
+                            DownloadManager.STATUS_PENDING -> appCtx.getString(R.string.wait_download)
+                            DownloadManager.STATUS_RUNNING -> appCtx.getString(R.string.downloading)
+                            DownloadManager.STATUS_SUCCESSFUL -> {
+                                appCtx.getString(R.string.download_success)
+                            }
+
+                            DownloadManager.STATUS_FAILED -> appCtx.getString(R.string.download_error)
+                            else -> appCtx.getString(R.string.unknown_state)
+                        }
+                        print(status)
+                        delay(1000)
+                    } else {
+                        return@runBlocking
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 1 - 1
build.gradle

@@ -5,7 +5,7 @@ buildscript {
         compile_sdk_version = 33
         build_tool_version = '33.0.1'
         kotlin_version = '1.8.21'
-        agp_version = '8.0.0'
+        agp_version = '8.0.1'
         exoplayer_version = '2.18.6'
         splitties_version = '3.0.0'
         room_version = '2.5.1'