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
0005e330
Commit
0005e330
authored
Aug 23, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
c822423f
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
580 additions
and
36 deletions
+580
-36
build.gradle.kts
app/build.gradle.kts
+15
-0
DownloadBean.kt
app/src/main/java/com/base/browserwhite/bean/DownloadBean.kt
+5
-2
MainActivity.kt
...in/java/com/base/browserwhite/ui/activity/MainActivity.kt
+0
-15
WebViewFragment.kt
...se/browserwhite/ui/activity/webbrowser/WebViewFragment.kt
+37
-5
DownloadAdapter.kt
.../java/com/base/browserwhite/ui/adapter/DownloadAdapter.kt
+5
-0
FileFragment.kt
...in/java/com/base/browserwhite/ui/fragment/FileFragment.kt
+4
-6
DialogViews.kt
...c/main/java/com/base/browserwhite/ui/views/DialogViews.kt
+89
-2
VideoDownloader.kt
.../main/java/com/base/browserwhite/utils/VideoDownloader.kt
+12
-5
bg_cee2fb_18.xml
app/src/main/res/drawable/bg_cee2fb_18.xml
+5
-0
bg_play_pause.xml
app/src/main/res/drawable/bg_play_pause.xml
+1
-1
progress_bar_download.xml
app/src/main/res/drawable/progress_bar_download.xml
+22
-0
dialog_download_confirm.xml
app/src/main/res/layout/dialog_download_confirm.xml
+159
-0
dialog_download_finish.xml
app/src/main/res/layout/dialog_download_finish.xml
+99
-0
item_download_card.xml
app/src/main/res/layout/item_download_card.xml
+28
-0
layout_native_admob_download.xml
app/src/main/res/layout/layout_native_admob_download.xml
+99
-0
bianji.png
app/src/main/res/mipmap-xxhdpi/bianji.png
+0
-0
fofang.png
app/src/main/res/mipmap-xxhdpi/fofang.png
+0
-0
wancheng_download.png
app/src/main/res/mipmap-xxhdpi/wancheng_download.png
+0
-0
xiazhaiz_download.png
app/src/main/res/mipmap-xxhdpi/xiazhaiz_download.png
+0
-0
zanting_download.png
app/src/main/res/mipmap-xxhdpi/zanting_download.png
+0
-0
No files found.
app/build.gradle.kts
View file @
0005e330
...
@@ -76,6 +76,21 @@ dependencies {
...
@@ -76,6 +76,21 @@ dependencies {
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
//广告
implementation
(
"com.google.android.gms:play-services-ads:23.1.0"
)
implementation
(
"com.google.ads.mediation:applovin:12.4.3.0"
)
implementation
(
"com.google.ads.mediation:facebook:6.17.0.0"
)
implementation
(
"com.google.ads.mediation:mintegral:16.7.21.0"
)
implementation
(
"com.google.ads.mediation:pangle:5.9.0.4.0"
)
//max
implementation
(
"com.applovin:applovin-sdk:+"
)
// implementation("com.applovin.mediation:google-adapter:+")
// implementation("com.applovin.mediation:facebook-adapter:+")
// implementation("com.applovin.mediation:mintegral-adapter:+")
// implementation("com.applovin.mediation:bytedance-adapter:+")
// implementation("com.applovin.mediation:ironsource-adapter:+")
//第三方UI
//第三方UI
implementation
(
"com.airbnb.android:lottie:6.4.0"
)
implementation
(
"com.airbnb.android:lottie:6.4.0"
)
implementation
(
"com.github.bumptech.glide:glide:4.16.0"
)
implementation
(
"com.github.bumptech.glide:glide:4.16.0"
)
...
...
app/src/main/java/com/base/browserwhite/bean/DownloadBean.kt
View file @
0005e330
package
com.base.browserwhite.bean
package
com.base.browserwhite.bean
data class
DownloadBean
(
data class
DownloadBean
(
va
l
downloadId
:
Long
=
0
,
va
r
downloadId
:
Long
=
-
1L
,
va
l
path
:
String
=
""
,
va
r
path
:
String
=
""
,
val
uri
:
String
=
""
,
val
uri
:
String
=
""
,
val
time
:
String
=
""
,
val
time
:
String
=
""
,
)
{
)
{
var
state
:
Int
=
-
1
var
progress
:
Int
=
-
1
var
name
:
String
=
""
var
isTime
:
Boolean
=
false
var
isTime
:
Boolean
=
false
var
uiType
:
Int
=
1
var
uiType
:
Int
=
1
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/MainActivity.kt
View file @
0005e330
...
@@ -6,30 +6,16 @@ import android.os.Build
...
@@ -6,30 +6,16 @@ import android.os.Build
import
android.os.Environment
import
android.os.Environment
import
android.os.StatFs
import
android.os.StatFs
import
android.os.storage.StorageManager
import
android.os.storage.StorageManager
import
android.view.View
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.view.isEmpty
import
androidx.core.view.updatePadding
import
androidx.core.view.updatePadding
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
androidx.lifecycle.lifecycleScope
import
androidx.viewpager2.adapter.FragmentStateAdapter
import
androidx.viewpager2.adapter.FragmentStateAdapter
import
androidx.viewpager2.widget.ViewPager2
import
androidx.viewpager2.widget.ViewPager2
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.R
import
com.base.browserwhite.bean.MediaBean
import
com.base.browserwhite.databinding.ActivityMainBinding
import
com.base.browserwhite.databinding.ActivityMainBinding
import
com.base.browserwhite.ui.fragment.FileFragment
import
com.base.browserwhite.ui.fragment.FileFragment
import
com.base.browserwhite.ui.fragment.HomeFragment
import
com.base.browserwhite.ui.fragment.HomeFragment
import
com.base.browserwhite.ui.views.DialogViews.showMyAccountDialog
import
com.base.browserwhite.ui.views.DialogViews.showMyAccountDialog
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.MediaStoreUtils.getMediaFile
import
com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import
com.base.browserwhite.utils.VideoDownloader
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.channels.BufferOverflow
import
kotlinx.coroutines.flow.MutableSharedFlow
import
kotlinx.coroutines.launch
import
java.io.File
import
java.io.File
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
>()
{
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
>()
{
...
@@ -77,7 +63,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
...
@@ -77,7 +63,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override
fun
onPageSelected
(
position
:
Int
)
{
override
fun
onPageSelected
(
position
:
Int
)
{
}
}
})
})
VideoDownloader
.
downloadVideo
(
this
,
"https://assets.mixkit.co/videos/4702/4702-720.mp4"
)
}
}
...
...
app/src/main/java/com/base/browserwhite/ui/activity/webbrowser/WebViewFragment.kt
View file @
0005e330
...
@@ -18,11 +18,16 @@ import android.webkit.WebViewClient
...
@@ -18,11 +18,16 @@ import android.webkit.WebViewClient
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
com.base.browserwhite.bean.DownloadBean
import
com.base.browserwhite.bean.DownloadBean
import
com.base.browserwhite.databinding.FragmentWebViewBinding
import
com.base.browserwhite.databinding.FragmentWebViewBinding
import
com.base.browserwhite.ui.adapter.DownloadAdapter
import
com.base.browserwhite.ui.fragment.BaseFragment
import
com.base.browserwhite.ui.fragment.BaseFragment
import
com.base.browserwhite.ui.views.DialogViews.showDownloadVideoDialog
import
com.base.browserwhite.ui.views.DialogViews.showDownloadVideoDialog
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.VideoDownloader
import
com.base.browserwhite.utils.VideoDownloader.queryDownloadProgress
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.isActive
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.launch
import
org.json.JSONArray
import
org.json.JSONArray
import
kotlin.random.Random
import
kotlin.random.Random
...
@@ -31,7 +36,7 @@ import kotlin.random.Random
...
@@ -31,7 +36,7 @@ import kotlin.random.Random
class
WebViewFragment
:
BaseFragment
<
FragmentWebViewBinding
>()
{
class
WebViewFragment
:
BaseFragment
<
FragmentWebViewBinding
>()
{
private
val
TAG
=
"WebViewFragment"
private
val
TAG
=
"WebViewFragment"
private
var
j
ob
:
Job
?
=
null
private
var
progressJ
ob
:
Job
?
=
null
var
url
:
String
=
""
var
url
:
String
=
""
private
val
downloadList
=
arrayListOf
<
DownloadBean
>()
private
val
downloadList
=
arrayListOf
<
DownloadBean
>()
...
@@ -68,7 +73,37 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
...
@@ -68,7 +73,37 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
reloadWebView
()
reloadWebView
()
}
}
binding
.
flDownload
.
setOnClickListener
{
binding
.
flDownload
.
setOnClickListener
{
requireContext
().
showDownloadVideoDialog
(
downloadList
)
val
adapter
=
requireContext
().
showDownloadVideoDialog
(
downloadList
,
download
=
{
bean
:
DownloadBean
->
val
pair
=
VideoDownloader
.
downloadVideo
(
requireContext
(),
bean
.
uri
,
bean
.
name
)
bean
.
downloadId
=
pair
.
first
bean
.
path
=
pair
.
second
.
absolutePath
},
dismissAction
=
{
progressJob
?.
cancel
()
},
)
progressJob
?.
cancel
()
progressJob
=
upDataProgress
(
adapter
)
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
private
fun
upDataProgress
(
adapter
:
DownloadAdapter
)
=
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
while
(
isActive
)
{
downloadList
.
forEach
{
bean
:
DownloadBean
->
queryDownloadProgress
(
requireContext
(),
bean
.
downloadId
,
uiAction
=
{
progress
->
bean
.
progress
=
progress
},
noRunningAction
=
{
status
->
bean
.
state
=
status
})
}
adapter
.
notifyDataSetChanged
()
delay
(
1000
)
}
}
}
}
...
@@ -169,14 +204,11 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
...
@@ -169,14 +204,11 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
LogEx
.
logDebug
(
TAG
,
"onPageFinished"
)
LogEx
.
logDebug
(
TAG
,
"onPageFinished"
)
super
.
onPageFinished
(
view
,
url
)
super
.
onPageFinished
(
view
,
url
)
onPageFinished
?.
invoke
(
url
)
onPageFinished
?.
invoke
(
url
)
job
?.
cancel
()
}
}
override
fun
onReceivedSslError
(
view
:
WebView
?,
handler
:
SslErrorHandler
?,
error
:
SslError
?)
{
override
fun
onReceivedSslError
(
view
:
WebView
?,
handler
:
SslErrorHandler
?,
error
:
SslError
?)
{
LogEx
.
logDebug
(
TAG
,
"onReceivedSslError"
)
LogEx
.
logDebug
(
TAG
,
"onReceivedSslError"
)
super
.
onReceivedSslError
(
view
,
handler
,
error
)
super
.
onReceivedSslError
(
view
,
handler
,
error
)
job
?.
cancel
()
binding
.
webView
.
visibility
=
View
.
GONE
binding
.
webView
.
visibility
=
View
.
GONE
binding
.
llError
.
visibility
=
View
.
GONE
binding
.
llError
.
visibility
=
View
.
GONE
if
(
error
!=
null
)
{
if
(
error
!=
null
)
{
...
...
app/src/main/java/com/base/browserwhite/ui/adapter/DownloadAdapter.kt
View file @
0005e330
...
@@ -19,6 +19,8 @@ class DownloadAdapter : BaseQuickAdapter<DownloadBean, DownloadAdapter.DownloadV
...
@@ -19,6 +19,8 @@ class DownloadAdapter : BaseQuickAdapter<DownloadBean, DownloadAdapter.DownloadV
inner
class
DownloadViewHolder
(
view
:
View
)
:
ViewHolder
(
view
)
inner
class
DownloadViewHolder
(
view
:
View
)
:
ViewHolder
(
view
)
var
downloadAction
:
((
item
:
DownloadBean
)
->
Unit
)?
=
null
override
fun
onBindViewHolder
(
holder
:
DownloadViewHolder
,
position
:
Int
,
item
:
DownloadBean
?)
{
override
fun
onBindViewHolder
(
holder
:
DownloadViewHolder
,
position
:
Int
,
item
:
DownloadBean
?)
{
if
(
item
==
null
)
return
if
(
item
==
null
)
return
val
context
=
holder
.
itemView
.
context
val
context
=
holder
.
itemView
.
context
...
@@ -35,6 +37,9 @@ class DownloadAdapter : BaseQuickAdapter<DownloadBean, DownloadAdapter.DownloadV
...
@@ -35,6 +37,9 @@ class DownloadAdapter : BaseQuickAdapter<DownloadBean, DownloadAdapter.DownloadV
val
binding
=
ItemDownloadCardBinding
.
bind
(
holder
.
itemView
)
val
binding
=
ItemDownloadCardBinding
.
bind
(
holder
.
itemView
)
Glide
.
with
(
context
).
load
(
item
.
uri
).
centerCrop
().
into
(
binding
.
iv
)
Glide
.
with
(
context
).
load
(
item
.
uri
).
centerCrop
().
into
(
binding
.
iv
)
binding
.
tvName
.
text
=
item
.
uri
.
split
(
"/"
).
last
()
binding
.
tvName
.
text
=
item
.
uri
.
split
(
"/"
).
last
()
binding
.
ivDownload
.
setOnClickListener
{
downloadAction
?.
invoke
(
item
)
}
}
}
}
}
...
...
app/src/main/java/com/base/browserwhite/ui/fragment/FileFragment.kt
View file @
0005e330
...
@@ -8,11 +8,9 @@ import android.widget.Toast
...
@@ -8,11 +8,9 @@ import android.widget.Toast
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.bean.MediaBean
import
com.base.browserwhite.bean.MediaBean
import
com.base.browserwhite.databinding.ActivityWebDownloadGuideBinding
import
com.base.browserwhite.databinding.FragmentFileBinding
import
com.base.browserwhite.databinding.FragmentFileBinding
import
com.base.browserwhite.ui.activity.MainActivity
import
com.base.browserwhite.ui.activity.MainActivity
import
com.base.browserwhite.ui.activity.cleanjunk.ScanJunkActivity
import
com.base.browserwhite.ui.activity.cleanjunk.ScanJunkActivity
import
com.base.browserwhite.ui.activity.download.WebDownloadGuideActivity
import
com.base.browserwhite.ui.activity.download.WebDownloadManagerActivity
import
com.base.browserwhite.ui.activity.download.WebDownloadManagerActivity
import
com.base.browserwhite.ui.activity.mediabrowser.MediaBrowserActivity
import
com.base.browserwhite.ui.activity.mediabrowser.MediaBrowserActivity
import
com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import
com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
...
@@ -32,9 +30,6 @@ import com.base.browserwhite.utils.MediaStoreUtils.getMediaZipCountSize
...
@@ -32,9 +30,6 @@ import com.base.browserwhite.utils.MediaStoreUtils.getMediaZipCountSize
import
com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import
com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import
com.base.browserwhite.utils.PermissionHelp.requestStorePermission
import
com.base.browserwhite.utils.PermissionHelp.requestStorePermission
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.async
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.flow.collectLatest
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.launch
import
java.io.File
import
java.io.File
...
@@ -127,7 +122,10 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
...
@@ -127,7 +122,10 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
})
})
}
}
binding
.
llDownload
.
setOnClickListener
{
binding
.
llDownload
.
setOnClickListener
{
startActivity
(
Intent
(
requireContext
(),
WebDownloadManagerActivity
::
class
.
java
))
// startActivity(Intent(requireContext(), WebDownloadManagerActivity::class.java))
startActivity
(
Intent
(
requireContext
(),
WebBrowserActivity
::
class
.
java
).
apply
{
putExtra
(
"url"
,
"https://mixkit.co/free-stock-video/girl-dancing-happily-in-a-field-of-flowers-4702/"
)
})
}
}
...
...
app/src/main/java/com/base/browserwhite/ui/views/DialogViews.kt
View file @
0005e330
...
@@ -7,9 +7,15 @@ import android.content.Context
...
@@ -7,9 +7,15 @@ import android.content.Context
import
android.graphics.Color
import
android.graphics.Color
import
android.graphics.drawable.ColorDrawable
import
android.graphics.drawable.ColorDrawable
import
android.view.Gravity
import
android.view.Gravity
import
android.view.KeyEvent
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.view.View
import
android.view.View
import
android.view.inputmethod.EditorInfo
import
android.view.inputmethod.InputMethodManager
import
android.widget.FrameLayout
import
android.widget.FrameLayout
import
android.widget.TextView
import
android.widget.TextView.OnEditorActionListener
import
android.widget.Toast
import
com.base.browserwhite.R
import
com.base.browserwhite.R
import
com.base.browserwhite.bean.ConstObject.BAIDU
import
com.base.browserwhite.bean.ConstObject.BAIDU
import
com.base.browserwhite.bean.ConstObject.BING
import
com.base.browserwhite.bean.ConstObject.BING
...
@@ -19,17 +25,21 @@ import com.base.browserwhite.bean.ConstObject.YAHOO
...
@@ -19,17 +25,21 @@ import com.base.browserwhite.bean.ConstObject.YAHOO
import
com.base.browserwhite.bean.ConstObject.YANDEX
import
com.base.browserwhite.bean.ConstObject.YANDEX
import
com.base.browserwhite.bean.DownloadBean
import
com.base.browserwhite.bean.DownloadBean
import
com.base.browserwhite.databinding.DialogDeleteTipBinding
import
com.base.browserwhite.databinding.DialogDeleteTipBinding
import
com.base.browserwhite.databinding.DialogDownloadConfirmBinding
import
com.base.browserwhite.databinding.DialogDownloadFinishBinding
import
com.base.browserwhite.databinding.DialogDownloadVideoBinding
import
com.base.browserwhite.databinding.DialogDownloadVideoBinding
import
com.base.browserwhite.databinding.DialogMediaMoreBinding
import
com.base.browserwhite.databinding.DialogMediaMoreBinding
import
com.base.browserwhite.databinding.DialogMyAccountBinding
import
com.base.browserwhite.databinding.DialogMyAccountBinding
import
com.base.browserwhite.databinding.DialogPermissonOpenBinding
import
com.base.browserwhite.databinding.DialogPermissonOpenBinding
import
com.base.browserwhite.databinding.DialogSearchEngineBinding
import
com.base.browserwhite.databinding.DialogSearchEngineBinding
import
com.base.browserwhite.ui.adapter.DownloadAdapter
import
com.base.browserwhite.ui.adapter.DownloadAdapter
import
com.base.browserwhite.ui.views.DialogViews.showDeleteTipDialog
import
com.base.browserwhite.utils.LogEx
import
com.base.browserwhite.utils.LogEx
import
com.b
ase.browserwhite.utils.XmlEx.inflat
e
import
com.b
umptech.glide.Glid
e
import
com.google.android.material.bottomsheet.BottomSheetBehavior
import
com.google.android.material.bottomsheet.BottomSheetBehavior
import
com.google.android.material.bottomsheet.BottomSheetDialog
import
com.google.android.material.bottomsheet.BottomSheetDialog
object
DialogViews
{
object
DialogViews
{
@SuppressLint
(
"SetTextI18n"
)
@SuppressLint
(
"SetTextI18n"
)
...
@@ -221,7 +231,11 @@ object DialogViews {
...
@@ -221,7 +231,11 @@ object DialogViews {
}
}
}
}
fun
Context
.
showDownloadVideoDialog
(
list
:
List
<
DownloadBean
>)
{
fun
Context
.
showDownloadVideoDialog
(
list
:
List
<
DownloadBean
>,
download
:
(
item
:
DownloadBean
)
->
Unit
,
dismissAction
:
()
->
Unit
):
DownloadAdapter
{
val
TAG
=
"DownloadVideoDialog"
val
TAG
=
"DownloadVideoDialog"
val
dialog
=
BottomSheetDialog
(
this
)
val
dialog
=
BottomSheetDialog
(
this
)
val
binding
=
DialogDownloadVideoBinding
.
inflate
(
LayoutInflater
.
from
(
this
))
val
binding
=
DialogDownloadVideoBinding
.
inflate
(
LayoutInflater
.
from
(
this
))
...
@@ -236,6 +250,12 @@ object DialogViews {
...
@@ -236,6 +250,12 @@ object DialogViews {
behavior
.
state
=
BottomSheetBehavior
.
STATE_EXPANDED
behavior
.
state
=
BottomSheetBehavior
.
STATE_EXPANDED
val
adapter
=
DownloadAdapter
()
val
adapter
=
DownloadAdapter
()
adapter
.
downloadAction
=
{
item
:
DownloadBean
->
dialog
.
dismiss
()
showDownloadConfirmDialog
(
item
)
{
download
.
invoke
(
item
)
}
}
binding
.
rv
.
adapter
=
adapter
binding
.
rv
.
adapter
=
adapter
adapter
.
submitList
(
list
)
adapter
.
submitList
(
list
)
...
@@ -246,7 +266,74 @@ object DialogViews {
...
@@ -246,7 +266,74 @@ object DialogViews {
binding
.
rv
.
layoutParams
.
height
=
recyclerViewHeight
binding
.
rv
.
layoutParams
.
height
=
recyclerViewHeight
binding
.
rv
.
requestLayout
()
binding
.
rv
.
requestLayout
()
}
}
dialog
.
setOnDismissListener
{
dismissAction
.
invoke
()
}
return
adapter
}
private
fun
Context
.
showDownloadConfirmDialog
(
item
:
DownloadBean
,
download
:
()
->
Unit
)
{
val
dialog
=
BottomSheetDialog
(
this
)
val
binding
=
DialogDownloadConfirmBinding
.
inflate
(
LayoutInflater
.
from
(
this
))
dialog
.
setContentView
(
binding
.
root
)
dialog
.
setCanceledOnTouchOutside
(
false
)
dialog
.
show
()
val
parentView
=
binding
.
root
.
parent
as
View
val
behavior
=
BottomSheetBehavior
.
from
(
parentView
)
//展开
behavior
.
state
=
BottomSheetBehavior
.
STATE_EXPANDED
Glide
.
with
(
this
).
load
(
item
.
uri
).
centerCrop
().
into
(
binding
.
iv
)
binding
.
editName
.
setText
(
item
.
uri
.
split
(
"/"
).
last
())
binding
.
ivEdit
.
setOnClickListener
{
binding
.
editName
.
isEnabled
=
true
binding
.
editName
.
setBackgroundResource
(
android
.
R
.
drawable
.
edit_text
)
binding
.
editName
.
requestFocus
()
}
binding
.
editName
.
setOnFocusChangeListener
{
v
,
hasFocus
->
if
(
hasFocus
)
{
val
imm
=
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
)
as
InputMethodManager
?
imm
?.
showSoftInput
(
v
,
InputMethodManager
.
SHOW_IMPLICIT
)
}
}
binding
.
editName
.
setOnEditorActionListener
(
object
:
OnEditorActionListener
{
override
fun
onEditorAction
(
v
:
TextView
?,
actionId
:
Int
,
event
:
KeyEvent
?):
Boolean
{
if
(
actionId
==
EditorInfo
.
IME_ACTION_DONE
)
{
binding
.
editName
.
isEnabled
=
false
binding
.
editName
.
background
=
null
return
true
}
return
false
}
})
binding
.
tvCancel
.
setOnClickListener
{
dialog
.
dismiss
()
}
binding
.
tvConfirm
.
setOnClickListener
{
if
(
binding
.
editName
.
text
.
isNullOrEmpty
())
{
Toast
.
makeText
(
this
,
"name is empty"
,
Toast
.
LENGTH_SHORT
).
show
()
return
@setOnClickListener
}
item
.
name
=
binding
.
editName
.
text
.
toString
()
dialog
.
dismiss
()
download
.
invoke
()
}
}
fun
Context
.
showDownloadFinishDialog
()
{
val
binding
=
DialogDownloadFinishBinding
.
inflate
(
LayoutInflater
.
from
(
this
))
val
dialog
=
AlertDialog
.
Builder
(
this
).
create
()
dialog
.
setView
(
binding
.
root
)
dialog
.
show
()
val
params
=
dialog
.
window
?.
attributes
params
?.
width
=
resources
.
getDimensionPixelOffset
(
R
.
dimen
.
dp_335
)
dialog
.
window
?.
attributes
=
params
dialog
.
window
?.
setBackgroundDrawableResource
(
android
.
R
.
color
.
transparent
)
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/utils/VideoDownloader.kt
View file @
0005e330
...
@@ -13,10 +13,13 @@ import java.io.File
...
@@ -13,10 +13,13 @@ import java.io.File
object
VideoDownloader
{
object
VideoDownloader
{
//https://assets.mixkit.co/videos/4702/4702-720.mp4
//https://assets.mixkit.co/videos/4702/4702-720.mp4
fun
downloadVideo
(
context
:
Context
,
uri
:
String
):
Pair
<
Long
,
File
>
{
fun
downloadVideo
(
context
:
Context
,
uri
:
String
,
name
:
String
):
Pair
<
Long
,
File
>
{
val
downloadManager
=
context
.
getSystemService
(
Context
.
DOWNLOAD_SERVICE
)
as
DownloadManager
val
downloadManager
=
context
.
getSystemService
(
Context
.
DOWNLOAD_SERVICE
)
as
DownloadManager
val
fileName
=
uri
.
split
(
"/"
).
last
()
var
fileName
=
uri
.
split
(
"/"
).
last
()
if
(
name
.
isNotEmpty
())
{
fileName
=
name
}
// 创建一个DownloadManager.Request对象
// 创建一个DownloadManager.Request对象
...
@@ -27,7 +30,7 @@ object VideoDownloader {
...
@@ -27,7 +30,7 @@ object VideoDownloader {
request
.
setDescription
(
"Downloading $fileName"
)
request
.
setDescription
(
"Downloading $fileName"
)
// 设置通知栏的可见性
// 设置通知栏的可见性
request
.
setNotificationVisibility
(
DownloadManager
.
Request
.
VISIBILITY_VISIBLE
_NOTIFY_COMPLETED
)
request
.
setNotificationVisibility
(
DownloadManager
.
Request
.
VISIBILITY_VISIBLE
)
// 设置下载的文件类型
// 设置下载的文件类型
request
.
setMimeType
(
"video/mp4"
)
request
.
setMimeType
(
"video/mp4"
)
...
@@ -50,9 +53,13 @@ object VideoDownloader {
...
@@ -50,9 +53,13 @@ object VideoDownloader {
fun
queryDownloadProgress
(
fun
queryDownloadProgress
(
context
:
Context
,
context
:
Context
,
downloadId
:
Long
,
downloadId
:
Long
,
uiAction
:
(
progress
:
Int
)
->
U
ri
,
uiAction
:
(
progress
:
Int
)
->
U
nit
,
noRunningAction
:
(
status
:
Int
)
->
U
ri
noRunningAction
:
(
status
:
Int
)
->
U
nit
)
{
)
{
if
(
downloadId
==
-
1L
)
{
return
noRunningAction
.
invoke
(-
1
)
}
val
downloadManager
=
context
.
getSystemService
(
Context
.
DOWNLOAD_SERVICE
)
as
DownloadManager
val
downloadManager
=
context
.
getSystemService
(
Context
.
DOWNLOAD_SERVICE
)
as
DownloadManager
// 创建查询对象
// 创建查询对象
...
...
app/src/main/res/drawable/bg_cee2fb_18.xml
0 → 100644
View file @
0005e330
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#CEE2FB"
/>
<corners
android:radius=
"18dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/bg_play_pause.xml
View file @
0005e330
...
@@ -2,5 +2,5 @@
...
@@ -2,5 +2,5 @@
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:drawable=
"@mipmap/bofang"
android:state_selected=
"false"
/>
<item
android:drawable=
"@mipmap/bofang"
android:state_selected=
"false"
/>
<item
android:drawable=
"@mipmap/zanting"
android:state_selected=
"true"
/>
<item
android:drawable=
"@mipmap/zanting
_download
"
android:state_selected=
"true"
/>
</selector>
</selector>
\ No newline at end of file
app/src/main/res/drawable/progress_bar_download.xml
0 → 100644
View file @
0005e330
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:id=
"@android:id/background"
>
<shape>
<!-- <stroke-->
<!-- android:width="1px"-->
<!-- android:color="#FF3835" />-->
<solid
android:color=
"#E8E8F1"
/>
<corners
android:radius=
"10dp"
/>
</shape>
</item>
<item
android:id=
"@android:id/progress"
>
<scale
android:scaleWidth=
"100%"
>
<shape>
<corners
android:radius=
"10dp"
/>
<solid
android:color=
"#0571ED"
/>
</shape>
</scale>
</item>
</layer-list>
\ No newline at end of file
app/src/main/res/layout/dialog_download_confirm.xml
0 → 100644
View file @
0005e330
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/bg_edf1f4_tlr15"
>
<View
android:id=
"@+id/v"
android:layout_width=
"80dp"
android:layout_height=
"6dp"
android:layout_marginTop=
"12dp"
android:background=
"@drawable/bg_c2c8d4_3"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/tv_tip"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"15dp"
android:layout_marginTop=
"28dp"
android:text=
"Download or not?"
android:textColor=
"@color/black"
android:textSize=
"16sp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/v"
tools:ignore=
"HardcodedText"
/>
<androidx.cardview.widget.CardView
android:id=
"@+id/card"
android:layout_width=
"match_parent"
android:layout_height=
"85dp"
android:layout_marginHorizontal=
"15dp"
android:layout_marginTop=
"16dp"
app:cardBackgroundColor=
"@color/white"
app:cardCornerRadius=
"10dp"
app:layout_constraintTop_toBottomOf=
"@id/tv_tip"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
>
<androidx.cardview.widget.CardView
android:layout_width=
"64dp"
android:layout_height=
"64dp"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"10dp"
app:cardCornerRadius=
"5dp"
app:cardElevation=
"0dp"
>
<ImageView
android:id=
"@+id/iv"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:ignore=
"ContentDescription"
/>
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width=
"27dp"
android:layout_height=
"27dp"
android:layout_gravity=
"center"
android:src=
"@mipmap/t_videoicon"
/>
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginHorizontal=
"10dp"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
<EditText
android:id=
"@+id/edit_name"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@null"
android:enabled=
"false"
android:imeOptions=
"actionDone"
android:singleLine=
"true"
android:textColor=
"@color/black"
android:textSize=
"18sp"
tools:ignore=
"Autofill,LabelFor,TextFields"
tools:text=
"1796-21.mp4"
/>
<TextView
android:id=
"@+id/tv_size"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"6dp"
android:textColor=
"#6F6F70"
android:textSize=
"12sp"
tools:text=
"50.2 KB"
/>
</LinearLayout>
<FrameLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginEnd=
"10dp"
>
<ImageView
android:id=
"@+id/iv_edit"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/bianji"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"15dp"
android:layout_marginBottom=
"25dp"
android:orientation=
"horizontal"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/card"
>
<TextView
android:id=
"@+id/tv_cancel"
android:layout_width=
"166dp"
android:layout_height=
"50dp"
android:background=
"@drawable/bg_e1e4e9_25"
android:gravity=
"center"
android:text=
"Cancel"
android:textColor=
"@color/black"
android:textSize=
"18sp"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/tv_confirm"
android:layout_width=
"166dp"
android:layout_height=
"50dp"
android:layout_marginStart=
"10dp"
android:background=
"@drawable/bg_0571ed_25"
android:gravity=
"center"
android:text=
"Confirm"
android:textColor=
"@color/white"
android:textSize=
"18sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/dialog_download_finish.xml
0 → 100644
View file @
0005e330
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"345dp"
android:layout_height=
"345dp"
android:layout_margin=
"5dp"
app:cardCornerRadius=
"15dp"
app:cardElevation=
"0dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"10dp"
android:layout_marginTop=
"25dp"
android:orientation=
"horizontal"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|start"
android:src=
"@mipmap/wancheng_download"
tools:ignore=
"ContentDescription"
/>
<LinearLayout
android:id=
"@+id/ll"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/tv_name"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:ellipsize=
"end"
android:singleLine=
"true"
android:text=
"video_preview_h2…"
android:textColor=
"#010101"
android:textSize=
"18sp"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/tv_size"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"5dp"
android:text=
"358KB"
android:textColor=
"#6F6F70"
android:textSize=
"12sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
<TextView
android:layout_width=
"80dp"
android:layout_height=
"36dp"
android:layout_gravity=
"center_vertical|end"
android:background=
"@drawable/bg_cee2fb_18"
android:gravity=
"center"
android:text=
"Play"
android:textColor=
"#0672EE"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
<FrameLayout
android:id=
"@+id/fl_ad"
android:layout_width=
"match_parent"
android:layout_height=
"175dp"
android:layout_marginTop=
"20dp"
>
<include
layout=
"@layout/layout_native_admob_download"
/>
</FrameLayout>
<TextView
android:id=
"@+id/tv_download"
android:layout_width=
"match_parent"
android:layout_height=
"50dp"
android:layout_marginHorizontal=
"16dp"
android:layout_marginTop=
"15dp"
android:background=
"@drawable/bg_0571ed_25"
android:gravity=
"center"
android:text=
"Download"
android:textColor=
"@color/white"
android:textSize=
"18sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
app/src/main/res/layout/item_download_card.xml
View file @
0005e330
...
@@ -49,6 +49,8 @@
...
@@ -49,6 +49,8 @@
android:id=
"@+id/tv_name"
android:id=
"@+id/tv_name"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:ellipsize=
"middle"
android:singleLine=
"true"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"18sp"
android:textSize=
"18sp"
tools:text=
"1796-21.mp4"
/>
tools:text=
"1796-21.mp4"
/>
...
@@ -71,11 +73,37 @@
...
@@ -71,11 +73,37 @@
android:layout_marginEnd=
"10dp"
>
android:layout_marginEnd=
"10dp"
>
<ImageView
<ImageView
android:id=
"@+id/iv_download"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/xiazhai"
android:src=
"@mipmap/xiazhai"
android:visibility=
"gone"
tools:ignore=
"ContentDescription"
/>
tools:ignore=
"ContentDescription"
/>
<FrameLayout
android:id=
"@+id/fl_download"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
>
<ProgressBar
android:id=
"@+id/progress_bar"
android:layout_width=
"35dp"
android:layout_height=
"35dp"
android:indeterminate=
"false"
android:max=
"100"
android:progressDrawable=
"@drawable/progress_bar_clean"
tools:progress=
"50"
/>
<ImageView
android:id=
"@+id/iv_xiazai_zantin"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:src=
"@mipmap/xiazhaiz_download"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
</FrameLayout>
</FrameLayout>
...
...
app/src/main/res/layout/layout_native_admob_download.xml
0 → 100644
View file @
0005e330
<com.google.android.gms.ads.nativead.NativeAdView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:baselineAligned=
"false"
android:orientation=
"vertical"
android:padding=
"10dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
<ImageView
android:id=
"@+id/ad_app_icon"
android:layout_width=
"46dp"
android:layout_height=
"46dp"
android:layout_gravity=
"center_vertical"
tools:ignore=
"ContentDescription"
/>
<LinearLayout
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginHorizontal=
"8dp"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:background=
"#FF923E"
android:padding=
"2dp"
android:text=
"Ad"
android:textColor=
"@color/white"
android:textSize=
"12sp"
tools:ignore=
"HardcodedText"
/>
<TextView
android:id=
"@+id/ad_headline"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"8dp"
android:ellipsize=
"end"
android:maxLines=
"2"
android:textColor=
"@color/black"
android:textSize=
"14sp"
android:textStyle=
"bold"
/>
</LinearLayout>
<TextView
android:id=
"@+id/ad_body"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:ellipsize=
"end"
android:maxLines=
"2"
android:textColor=
"@color/black"
android:textSize=
"12sp"
/>
</LinearLayout>
</LinearLayout>
<com.google.android.gms.ads.nativead.MediaView
android:id=
"@+id/ad_media"
android:layout_width=
"match_parent"
android:layout_height=
"100dp"
android:layout_gravity=
"center_vertical"
android:layout_marginVertical=
"10dp"
/>
<androidx.appcompat.widget.AppCompatButton
android:id=
"@+id/ad_call_to_action"
android:layout_width=
"match_parent"
android:layout_height=
"38dp"
android:layout_gravity=
"center_vertical"
android:background=
"@drawable/bg_0571ed_25"
android:gravity=
"center"
android:textAllCaps=
"false"
android:textColor=
"@color/white"
android:textSize=
"15sp"
tools:text=
"Install"
/>
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/bianji.png
0 → 100644
View file @
0005e330
2.59 KB
app/src/main/res/mipmap-xxhdpi/fofang.png
0 → 100644
View file @
0005e330
1019 Bytes
app/src/main/res/mipmap-xxhdpi/wancheng_download.png
0 → 100644
View file @
0005e330
4.67 KB
app/src/main/res/mipmap-xxhdpi/xiazhaiz_download.png
0 → 100644
View file @
0005e330
911 Bytes
app/src/main/res/mipmap-xxhdpi/zanting_download.png
0 → 100644
View file @
0005e330
286 Bytes
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