Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
B
Browser White
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
Browser White
Commits
1aacfe19
Commit
1aacfe19
authored
Aug 23, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
6b630e0b
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
49 additions
and
115 deletions
+49
-115
build.gradle.kts
app/build.gradle.kts
+1
-0
DownloadBean.kt
app/src/main/java/com/base/browserwhite/bean/DownloadBean.kt
+1
-1
WebDownloadManagerActivity.kt
...rwhite/ui/activity/download/WebDownloadManagerActivity.kt
+16
-2
WebViewFragment.kt
...se/browserwhite/ui/activity/webbrowser/WebViewFragment.kt
+10
-14
DownloadAdapter.kt
.../java/com/base/browserwhite/ui/adapter/DownloadAdapter.kt
+3
-1
DialogViews.kt
...c/main/java/com/base/browserwhite/ui/views/DialogViews.kt
+14
-7
DownloadHelper.kt
...c/main/java/com/base/browserwhite/utils/DownloadHelper.kt
+1
-4
VideoDownloader.kt
.../main/java/com/base/browserwhite/utils/VideoDownloader.kt
+3
-86
No files found.
app/build.gradle.kts
View file @
1aacfe19
...
...
@@ -120,6 +120,7 @@ dependencies {
implementation
(
"com.squareup.okhttp3:logging-interceptor"
)
//支持暂停恢复下载
implementation
(
"com.github.amitshekhariitbhu:PRDownloader:1.0.1"
)
implementation
(
"com.liulishuo.filedownloader:library:1.7.7"
)
//facebook
...
...
app/src/main/java/com/base/browserwhite/bean/DownloadBean.kt
View file @
1aacfe19
...
...
@@ -6,7 +6,7 @@ data class DownloadBean(
var
downloadId
:
Int
=
-
1
,
var
path
:
String
=
""
,
val
uri
:
String
=
""
,
va
l
time
:
String
=
""
,
va
r
time
:
String
=
""
,
)
{
var
state
:
Status
=
Status
.
UNKNOWN
var
progress
:
Int
=
-
1
...
...
app/src/main/java/com/base/browserwhite/ui/activity/download/WebDownloadManagerActivity.kt
View file @
1aacfe19
...
...
@@ -13,9 +13,12 @@ import com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.ui.adapter.DownloadAdapter
import
com.base.browserwhite.ui.views.DialogViews.showGerPermission
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.utils.DownloadHelper.getDownloadJson
import
com.base.browserwhite.utils.DownloadHelper.getNotFinishList
import
com.base.browserwhite.utils.KotlinExt.toFormatTime
import
com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import
com.base.browserwhite.utils.PermissionHelp.requestStorePermission
import
com.downloader.Status
import
java.io.File
class
WebDownloadManagerActivity
:
BaseActivity
<
ActivityWebDownloadManagerBinding
>()
{
...
...
@@ -63,8 +66,7 @@ class WebDownloadManagerActivity : BaseActivity<ActivityWebDownloadManagerBindin
private
fun
initData
()
{
val
appName
:
String
=
resources
.
getString
(
R
.
string
.
app_name
)
val
dir
=
File
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
),
appName
)
// dir.listFiles().isNullOrEmpty()
if
(
true
)
{
if
(
dir
.
listFiles
().
isNullOrEmpty
())
{
binding
.
llEmpty
.
isVisible
=
true
}
else
{
val
fileList
=
arrayListOf
<
File
>()
...
...
@@ -72,6 +74,7 @@ class WebDownloadManagerActivity : BaseActivity<ActivityWebDownloadManagerBindin
val
beanList
=
arrayListOf
<
DownloadBean
>()
fileList
.
addAll
(
dir
.
listFiles
()
?:
arrayOf
())
fileList
.
sortBy
{
it
.
lastModified
()
}
fileList
.
forEach
{
val
time
=
it
.
lastModified
().
toFormatTime
()
if
(!
timeList
.
contains
(
time
))
{
...
...
@@ -81,6 +84,17 @@ class WebDownloadManagerActivity : BaseActivity<ActivityWebDownloadManagerBindin
beanList
.
add
(
DownloadBean
(
path
=
it
.
absolutePath
))
}
}
getNotFinishList
(
getDownloadJson
()).
forEach
{
old
->
if
(!
timeList
.
contains
(
old
.
time
))
{
timeList
.
add
(
old
.
time
)
beanList
.
add
(
DownloadBean
(
time
=
old
.
time
).
apply
{
isTime
=
true
})
}
val
index
=
beanList
.
indexOfFirst
{
bean
->
bean
.
time
==
old
.
time
}
runCatching
{
beanList
.
add
(
index
+
1
,
old
)
}
}
adapter
.
submitList
(
beanList
)
}
...
...
app/src/main/java/com/base/browserwhite/ui/activity/webbrowser/WebViewFragment.kt
View file @
1aacfe19
package
com.base.browserwhite.ui.activity.webbrowser
import
android.annotation.SuppressLint
import
android.app.DownloadManager
import
android.net.Uri
import
android.net.http.SslError
import
android.view.View
...
...
@@ -23,21 +22,16 @@ import com.base.browserwhite.ui.adapter.DownloadAdapter
import
com.base.browserwhite.ui.fragment.BaseFragment
import
com.base.browserwhite.ui.views.DialogViews.showDownloadVideoDialog
import
com.base.browserwhite.utils.DownloadHelper.getDownloadJson
import
com.base.browserwhite.utils.DownloadHelper.getOlderList
import
com.base.browserwhite.utils.DownloadHelper.getNotFinishList
import
com.base.browserwhite.utils.KotlinExt.toFormatTime
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.VideoDownloader
import
com.base.browserwhite.utils.VideoDownloader.queryDownloadProgress
import
com.downloader.PRDownloader
import
com.downloader.Status
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.isActive
import
kotlinx.coroutines.launch
import
org.json.JSONArray
import
java.io.File
import
java.lang.reflect.Type
import
kotlin.random.Random
...
...
@@ -104,12 +98,14 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
val
gson
=
Gson
()
val
list
=
downloadList
.
filter
{
it
.
state
==
Status
.
PAUSED
||
it
.
state
==
Status
.
RUNNING
||
it
.
state
==
Status
.
COMPLETED
it
.
state
==
Status
.
PAUSED
||
it
.
state
==
Status
.
RUNNING
}
list
.
forEach
{
it
.
time
=
System
.
currentTimeMillis
().
toFormatTime
()
}
val
olderList
=
getOlderList
(
recordFile
,
gson
).
filter
{
!
list
.
contains
(
it
)
}
val
olderList
=
getNotFinishList
(
recordFile
,
gson
).
filter
{
old
->
val
status
=
PRDownloader
.
getStatus
(
old
.
downloadId
)
status
==
Status
.
PAUSED
||
status
==
Status
.
RUNNING
}.
filter
{
!
list
.
contains
(
it
)
}
val
arrayList
=
arrayListOf
<
DownloadBean
>()
arrayList
.
addAll
(
olderList
)
...
...
@@ -292,7 +288,7 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
binding
.
tvDownloadNumber
.
text
=
jsonArray
.
length
().
toString
()
}
val
recordFile
=
requireContext
().
getDownloadJson
()
val
olderList
=
get
Older
List
(
recordFile
,
Gson
())
val
olderList
=
get
NotFinish
List
(
recordFile
,
Gson
())
for
(
i
in
0
until
jsonArray
.
length
())
{
val
videoUrl
=
jsonArray
.
optString
(
i
)
LogEx
.
logDebug
(
TAG
,
videoUrl
)
...
...
app/src/main/java/com/base/browserwhite/ui/adapter/DownloadAdapter.kt
View file @
1aacfe19
...
...
@@ -19,6 +19,7 @@ import com.bumptech.glide.Glide
import
com.chad.library.adapter4.BaseQuickAdapter
import
com.downloader.PRDownloader
import
com.downloader.Status
import
com.downloader.internal.DownloadRequestQueue
import
java.io.File
...
...
@@ -42,6 +43,8 @@ class DownloadAdapter : BaseQuickAdapter<DownloadBean, DownloadAdapter.DownloadV
Glide
.
with
(
context
).
load
(
file
.
absoluteFile
).
centerCrop
().
into
(
binding
.
iv
)
binding
.
tvName
.
text
=
file
.
name
binding
.
tvSize
.
text
=
file
.
length
().
toFormatSize
()
}
else
if
(
item
.
uiType
==
2
)
{
val
binding
=
ItemDownloadCardBinding
.
bind
(
holder
.
itemView
)
Glide
.
with
(
context
).
load
(
item
.
uri
).
centerCrop
().
into
(
binding
.
iv
)
...
...
@@ -126,5 +129,4 @@ class DownloadAdapter : BaseQuickAdapter<DownloadBean, DownloadAdapter.DownloadV
bean
.
path
=
pair
.
second
.
absolutePath
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/views/DialogViews.kt
View file @
1aacfe19
...
...
@@ -5,6 +5,7 @@ import android.app.AlertDialog
import
android.app.Dialog
import
android.app.DownloadManager
import
android.content.Context
import
android.content.Intent
import
android.graphics.Color
import
android.graphics.drawable.ColorDrawable
import
android.view.Gravity
...
...
@@ -33,6 +34,7 @@ import com.base.browserwhite.databinding.DialogMediaMoreBinding
import
com.base.browserwhite.databinding.DialogMyAccountBinding
import
com.base.browserwhite.databinding.DialogPermissonOpenBinding
import
com.base.browserwhite.databinding.DialogSearchEngineBinding
import
com.base.browserwhite.ui.activity.download.WebDownloadManagerActivity
import
com.base.browserwhite.ui.adapter.DownloadAdapter
import
com.base.browserwhite.ui.views.DialogViews.showDeleteTipDialog
import
com.base.browserwhite.utils.LogEx
...
...
@@ -245,6 +247,14 @@ object DialogViews {
dialog
.
show
()
val
itemHeight
=
resources
.
getDimensionPixelOffset
(
R
.
dimen
.
dp_97
)
LogEx
.
logDebug
(
TAG
,
"itemHeight=$itemHeight"
)
if
(
list
.
size
>
3
)
{
val
recyclerViewHeight
:
Int
=
3
*
itemHeight
binding
.
rv
.
layoutParams
.
height
=
recyclerViewHeight
binding
.
rv
.
requestLayout
()
}
val
parentView
=
binding
.
root
.
parent
as
View
val
behavior
=
BottomSheetBehavior
.
from
(
parentView
)
//展开
...
...
@@ -260,16 +270,13 @@ object DialogViews {
binding
.
rv
.
adapter
=
adapter
adapter
.
submitList
(
list
)
val
itemHeight
=
resources
.
getDimensionPixelOffset
(
R
.
dimen
.
dp_97
)
LogEx
.
logDebug
(
TAG
,
"itemHeight=$itemHeight"
)
if
(
list
.
size
>
3
)
{
val
recyclerViewHeight
:
Int
=
3
*
itemHeight
binding
.
rv
.
layoutParams
.
height
=
recyclerViewHeight
binding
.
rv
.
requestLayout
()
}
dialog
.
setOnDismissListener
{
dismissAction
.
invoke
()
}
binding
.
tvDownloadDir
.
setOnClickListener
{
dialog
.
dismiss
()
startActivity
(
Intent
(
this
,
WebDownloadManagerActivity
::
class
.
java
))
}
return
adapter
}
...
...
app/src/main/java/com/base/browserwhite/utils/DownloadHelper.kt
View file @
1aacfe19
package
com.base.browserwhite.utils
import
android.annotation.SuppressLint
import
android.app.DownloadManager
import
android.content.Context
import
com.base.browserwhite.bean.DownloadBean
import
com.base.browserwhite.ui.adapter.DownloadAdapter
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
import
java.io.File
...
...
@@ -24,7 +21,7 @@ object DownloadHelper {
return
recordFile
}
fun
get
OlderList
(
recordFile
:
File
,
gson
:
Gson
):
List
<
DownloadBean
>
{
fun
get
NotFinishList
(
recordFile
:
File
,
gson
:
Gson
=
Gson
()
):
List
<
DownloadBean
>
{
val
olderText
=
recordFile
.
readText
()
val
type
:
Type
=
object
:
TypeToken
<
List
<
DownloadBean
>>()
{}.
type
return
gson
.
fromJson
(
olderText
,
type
)
?:
listOf
()
...
...
app/src/main/java/com/base/browserwhite/utils/VideoDownloader.kt
View file @
1aacfe19
package
com.base.browserwhite.utils
import
android.annotation.SuppressLint
import
android.app.DownloadManager
import
android.app.DownloadManager.Request.NETWORK_WIFI
import
android.content.Context
import
android.database.Cursor
import
android.net.Uri
import
android.os.Environment
import
com.base.browserwhite.R
import
com.downloader.Error
import
com.downloader.OnCancelListener
import
com.downloader.OnDownloadListener
import
com.downloader.PRDownloader
import
com.downloader.internal.DownloadTask
import
java.io.File
...
...
@@ -19,7 +18,6 @@ object VideoDownloader {
//https://assets.mixkit.co/videos/4702/4702-720.mp4
fun
downloadVideo
(
context
:
Context
,
uri
:
String
,
name
:
String
):
Pair
<
Long
,
File
>
{
val
downloadManager
=
context
.
getSystemService
(
Context
.
DOWNLOAD_SERVICE
)
as
DownloadManager
var
fileName
=
uri
.
split
(
"/"
).
last
()
if
(
name
.
isNotEmpty
())
{
fileName
=
name
...
...
@@ -32,6 +30,7 @@ object VideoDownloader {
// 设置下载的标题和描述
request
.
setTitle
(
fileName
)
request
.
setDescription
(
"Downloading $fileName"
)
request
.
setAllowedNetworkTypes
(
NETWORK_WIFI
)
// 设置通知栏的可见性
request
.
setNotificationVisibility
(
DownloadManager
.
Request
.
VISIBILITY_VISIBLE
)
...
...
@@ -92,86 +91,4 @@ object VideoDownloader {
return
Pair
(
downloadId
,
filePath
)
}
fun
queryDownloadProgress
(
context
:
Context
,
downloadId
:
Long
,
uiAction
:
(
progress
:
Int
)
->
Unit
,
noRunningAction
:
(
status
:
Int
)
->
Unit
)
{
if
(
downloadId
==
-
1L
)
{
return
noRunningAction
.
invoke
(-
1
)
}
val
downloadManager
=
context
.
getSystemService
(
Context
.
DOWNLOAD_SERVICE
)
as
DownloadManager
// 创建查询对象
val
query
=
DownloadManager
.
Query
().
setFilterById
(
downloadId
)
// 执行查询
val
cursor
=
downloadManager
.
query
(
query
)
// 检查游标是否有数据
if
(
cursor
!=
null
&&
cursor
.
moveToFirst
())
{
// 获取下载的状态
val
columnIndexStatus
=
cursor
.
getColumnIndex
(
DownloadManager
.
COLUMN_STATUS
)
val
status
=
cursor
.
getInt
(
columnIndexStatus
)
// 检查下载是否还在进行中
if
(
status
==
DownloadManager
.
STATUS_RUNNING
)
{
// 获取下载的进度
val
columnIndexBytesDownloadedSoFar
=
cursor
.
getColumnIndex
(
DownloadManager
.
COLUMN_BYTES_DOWNLOADED_SO_FAR
)
val
bytesDownloadedSoFar
=
cursor
.
getLong
(
columnIndexBytesDownloadedSoFar
)
val
columnIndexTotalSizeBytes
=
cursor
.
getColumnIndex
(
DownloadManager
.
COLUMN_TOTAL_SIZE_BYTES
)
val
totalSizeBytes
=
cursor
.
getLong
(
columnIndexTotalSizeBytes
)
// 计算下载的百分比
val
progress
=
(
100
*
bytesDownloadedSoFar
.
toFloat
()
/
totalSizeBytes
.
toFloat
()).
toInt
()
// 在这里处理进度更新,例如更新UI
uiAction
.
invoke
(
progress
)
}
else
{
// 处理下载完成或出错的情况
noRunningAction
.
invoke
(
status
)
when
(
status
)
{
DownloadManager
.
STATUS_PAUSED
->
{
println
(
"Download paused"
)
}
DownloadManager
.
STATUS_FAILED
->
{
println
(
"Download failed"
)
}
DownloadManager
.
STATUS_SUCCESSFUL
->
{
println
(
"Download successful"
)
}
}
}
// 关闭游标
cursor
.
close
()
}
}
@SuppressLint
(
"Range"
)
fun
queryDownloadFilePath
(
context
:
Context
,
downloadId
:
Long
):
String
{
var
filePath
:
String
=
""
val
downloadManager
=
context
.
getSystemService
(
Context
.
DOWNLOAD_SERVICE
)
as
DownloadManager
runCatching
{
val
query
=
DownloadManager
.
Query
().
setFilterById
(
downloadId
)
val
cursor
:
Cursor
=
downloadManager
.
query
(
query
)
if
(
cursor
.
moveToFirst
())
{
val
status
=
cursor
.
getInt
(
cursor
.
getColumnIndex
(
DownloadManager
.
COLUMN_STATUS
))
if
(
status
==
DownloadManager
.
STATUS_SUCCESSFUL
)
{
//下载文件的本地路径
filePath
=
cursor
.
getString
(
cursor
.
getColumnIndex
(
DownloadManager
.
COLUMN_LOCAL_FILENAME
))
}
}
cursor
.
close
()
}
return
filePath
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment