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
251c0733
Commit
251c0733
authored
Sep 03, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
44e0def0
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
564 additions
and
220 deletions
+564
-220
AboutActivity.kt
.../com/base/browserwhite/ui/activity/about/AboutActivity.kt
+36
-3
BookmarkActivity.kt
...ase/browserwhite/ui/activity/bookmark/BookmarkActivity.kt
+172
-164
BookmarkFragment.kt
...ase/browserwhite/ui/activity/bookmark/BookmarkFragment.kt
+107
-0
HistoryFragment.kt
...base/browserwhite/ui/activity/bookmark/HistoryFragment.kt
+45
-0
FeedbackActivity.kt
...ase/browserwhite/ui/activity/feedback/FeedbackActivity.kt
+20
-0
bg_0571ed_18.xml
app/src/main/res/drawable/bg_0571ed_18.xml
+5
-0
bg_border_selector_submit.xml
app/src/main/res/drawable/bg_border_selector_submit.xml
+6
-0
activity_about.xml
app/src/main/res/layout/activity_about.xml
+52
-3
activity_bookmark.xml
app/src/main/res/layout/activity_bookmark.xml
+17
-46
activity_feedback.xml
app/src/main/res/layout/activity_feedback.xml
+23
-2
activity_scan_qrc.xml
app/src/main/res/layout/activity_scan_qrc.xml
+1
-1
dialog_my_account.xml
app/src/main/res/layout/dialog_my_account.xml
+2
-1
fragment_bookmark.xml
app/src/main/res/layout/fragment_bookmark.xml
+62
-0
fragment_history.xml
app/src/main/res/layout/fragment_history.xml
+16
-0
aboutbg.png
app/src/main/res/mipmap-xxhdpi/aboutbg.png
+0
-0
alogo.png
app/src/main/res/mipmap-xxhdpi/alogo.png
+0
-0
h_del_history.png
app/src/main/res/mipmap-xxhdpi/h_del_history.png
+0
-0
s_guanbi_sqrc.png
app/src/main/res/mipmap-xxhdpi/s_guanbi_sqrc.png
+0
-0
No files found.
app/src/main/java/com/base/browserwhite/ui/activity/about/AboutActivity.kt
View file @
251c0733
package
com.base.browserwhite.ui.activity.about
import
androidx.lifecycle.lifecycleScope
import
android.annotation.SuppressLint
import
android.content.Intent
import
android.graphics.Color
import
android.net.Uri
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
com.base.browserwhite.BuildConfig
import
com.base.browserwhite.R
import
com.base.browserwhite.databinding.ActivityAboutBinding
import
com.base.browserwhite.help.ConfigHelper
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.utils.BarUtils
class
AboutActivity
:
BaseActivity
<
ActivityAboutBinding
>()
{
...
...
@@ -10,9 +19,33 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
ActivityAboutBinding
.
inflate
(
layoutInflater
)
}
@SuppressLint
(
"SetTextI18n"
)
override
fun
initView
()
{
lifecycleScope
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding
.
tvAppName
.
text
=
resources
.
getString
(
R
.
string
.
app_name
)
binding
.
tvVersion
.
text
=
"v"
+
BuildConfig
.
VERSION_NAME
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
finishToMain
()
}
binding
.
flFanhui
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
binding
.
tvPrivacy
.
setOnClickListener
{
val
intent
=
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
ConfigHelper
.
privacyPolicy
)
)
startActivity
(
intent
)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/bookmark/BookmarkActivity.kt
View file @
251c0733
...
...
@@ -7,22 +7,12 @@ import android.view.View
import
androidx.activity.addCallback
import
androidx.core.view.isVisible
import
androidx.core.view.updatePadding
import
com.base.browserwhite.bean.BookmarkBean
import
com.base.browserwhite.bean.HistoryBean
import
androidx.fragment.app.Fragment
import
androidx.viewpager2.adapter.FragmentStateAdapter
import
androidx.viewpager2.widget.ViewPager2
import
com.base.browserwhite.databinding.ActivityBookmarkBinding
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.ui.activity.bookmark.BookmarkFolderActivity.Companion.selectFolder
import
com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import
com.base.browserwhite.ui.views.BookmarkDialog.showBookmarkMoreDialog
import
com.base.browserwhite.ui.views.DialogViews.showDeleteTipDialog
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.utils.KotlinExt.toFormatTime
import
com.base.browserwhite.utils.SpBeanUtils
import
com.base.browserwhite.utils.SpBeanUtils.BOOKMARK_NAV_SP_KEY
import
com.base.browserwhite.utils.SpBeanUtils.BOOKMARK_SP_KEY
import
com.base.browserwhite.utils.SpBeanUtils.HISTORY_SP_KEY
import
com.base.browserwhite.utils.ToastUtils.toast
import
com.google.gson.Gson
class
BookmarkActivity
:
BaseActivity
<
ActivityBookmarkBinding
>()
{
...
...
@@ -34,138 +24,53 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() {
ActivityBookmarkBinding
.
inflate
(
layoutInflater
)
}
private
lateinit
var
bookmarkAdapter
:
BookmarkAdapter
private
val
bookmarkList
=
arrayListOf
<
BookmarkBean
>()
private
val
bookmarkFragment
:
BookmarkFragment
by
lazy
{
BookmarkFragment
()
}
private
val
historyFragment
:
HistoryFragment
by
lazy
{
HistoryFragment
()
}
private
lateinit
var
historyAdapter
:
HistoryAdapter
private
val
historyList
=
arrayListOf
<
HistoryBean
>()
private
val
fragments
by
lazy
{
mutableListOf
(
bookmarkFragment
,
historyFragment
)
}
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
WHITE
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
bookmarkAdapter
=
BookmarkAdapter
()
bookmarkAdapter
.
changeFolderAction
=
{
folderId
->
val
list
=
bookmarkList
.
filter
{
it
.
folderId
==
folderId
}
binding
.
llEmpty
.
isVisible
=
list
.
isEmpty
()
bookmarkAdapter
.
submitList
(
list
)
}
bookmarkAdapter
.
moreAction
=
{
view
,
bean
->
showBookmarkMoreDialog
(
view
,
bean
.
isFolder
,
//新开
openNewTab
=
{
startActivity
(
Intent
(
this
,
WebBrowserActivity
::
class
.
java
).
apply
{
putExtra
(
"url"
,
bean
.
url
)
})
},
//删除
deleteAction
=
{
if
(
bean
.
isFolder
)
{
//书签目录
val
desc
=
"Delete folder [${bean.name}] and the bookmarks in the folder?"
showDeleteTipDialog
(
desc
)
{
//删除书签目录
SpBeanUtils
.
deleteSpBeanCondition
(
BOOKMARK_SP_KEY
,
bean
.
id
)
bookmarkList
.
remove
(
bean
)
bookmarkAdapter
.
remove
(
bean
)
//删除目录下书签
val
subBeanList
=
bookmarkList
.
filter
{
it
.
folder
==
bean
.
name
}
subBeanList
.
forEach
{
subBean
->
SpBeanUtils
.
deleteSpBeanCondition
(
BOOKMARK_SP_KEY
,
subBean
.
id
)
bookmarkList
.
remove
(
subBean
)
//删除书签导航
SpBeanUtils
.
deleteSpBeanCondition
(
BOOKMARK_NAV_SP_KEY
,
bean
.
id
)
}
}
}
else
{
//书签直接删除
SpBeanUtils
.
deleteSpBeanCondition
(
BOOKMARK_SP_KEY
,
bean
.
id
)
bookmarkList
.
remove
(
bean
)
bookmarkAdapter
.
remove
(
bean
)
//删除书签导航
SpBeanUtils
.
deleteSpBeanCondition
(
BOOKMARK_NAV_SP_KEY
,
bean
.
id
)
}
},
//编辑
editAction
=
{
BookmarkFolderEditActivity
.
editFolder
=
bean
launcher
.
launch
(
Intent
(
Intent
(
this
,
BookmarkFolderEditActivity
::
class
.
java
)))
},
//添加导航
addNavAction
=
{
SpBeanUtils
.
addSpBean
(
BOOKMARK_NAV_SP_KEY
,
bean
)
},
//选择
selectAction
=
{
selectUI
()
binding
.
viewPager2
.
run
{
adapter
=
object
:
FragmentStateAdapter
(
this
@BookmarkActivity
)
{
override
fun
getItemCount
():
Int
{
return
fragments
.
size
}
)
}
historyAdapter
=
HistoryAdapter
()
changeBookmark
()
}
private
fun
changeBookmark
()
{
binding
.
rv
.
adapter
=
bookmarkAdapter
bookmarkAdapter
.
submitList
(
bookmarkList
)
binding
.
llEmpty
.
isVisible
=
bookmarkList
.
isEmpty
()
}
private
fun
changeHistory
()
{
binding
.
rv
.
adapter
=
historyAdapter
historyAdapter
.
submitList
(
historyList
)
binding
.
llEmpty
.
isVisible
=
historyList
.
isEmpty
()
}
override
fun
onResume
()
{
super
.
onResume
()
initData
()
}
private
fun
initData
()
{
initBookmarkData
()
initHistoryData
()
}
private
fun
initHistoryData
()
{
historyList
.
clear
()
val
list
=
SpBeanUtils
.
getSpBeanList
(
HISTORY_SP_KEY
)
val
gson
=
Gson
()
val
item
=
list
.
map
{
gson
.
fromJson
(
it
,
HistoryBean
::
class
.
java
)
}
val
time
=
""
item
.
sortedBy
{
it
.
time
}.
forEach
{
if
(
time
!=
it
.
time
.
toFormatTime
())
{
it
.
showTime
=
true
override
fun
createFragment
(
position
:
Int
):
Fragment
{
return
fragments
[
position
]
}
}
historyList
.
add
(
it
)
}
}
private
fun
initBookmarkData
()
{
bookmarkList
.
clear
()
val
list
=
SpBeanUtils
.
getSpBeanList
(
BOOKMARK_SP_KEY
)
val
gson
=
Gson
()
val
items
=
list
.
map
{
gson
.
fromJson
(
it
,
BookmarkBean
::
class
.
java
)
}
bookmarkList
.
addAll
(
items
)
bookmarkAdapter
.
currentFolderId
=
0
bookmarkAdapter
.
submitList
(
bookmarkList
.
filter
{
it
.
folderId
==
bookmarkAdapter
.
currentFolderId
})
binding
.
llEmpty
.
isVisible
=
items
.
isEmpty
()
binding
.
viewPager2
.
registerOnPageChangeCallback
(
object
:
ViewPager2
.
OnPageChangeCallback
()
{
override
fun
onPageSelected
(
position
:
Int
)
{
noSelectUI
()
if
(
position
==
0
)
{
changeBookmark
()
}
else
{
changeHistory
()
}
}
})
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
if
(
currentTab
==
BOOKMARK_TAB
)
{
if
(
bookmarkAdapter
.
canBeforeFolder
())
{
bookmarkAdapter
.
beforeFolder
()
if
(
bookmark
Fragment
.
bookmark
Adapter
.
canBeforeFolder
())
{
bookmark
Fragment
.
bookmark
Adapter
.
beforeFolder
()
}
else
{
finishToMain
()
}
...
...
@@ -181,72 +86,87 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() {
if
(
binding
.
tvTabBookmark
.
isSelected
)
{
return
@setOnClickListener
}
binding
.
tvTabBookmark
.
isSelected
=
true
binding
.
tvTabHistory
.
isSelected
=
false
currentTab
=
BOOKMARK_TAB
changeBookmark
()
binding
.
viewPager2
.
currentItem
=
0
}
binding
.
tvTabBookmark
.
callOnClick
()
binding
.
tvTabHistory
.
setOnClickListener
{
if
(
binding
.
tvTabHistory
.
isSelected
)
{
return
@setOnClickListener
}
binding
.
tvTabHistory
.
isSelected
=
true
binding
.
tvTabBookmark
.
isSelected
=
false
currentTab
=
HISTORY_TAB
changeHistory
()
binding
.
viewPager2
.
currentItem
=
1
}
binding
.
ivNewFolder
.
setOnClickListener
{
launcher
.
launch
(
Intent
(
this
,
BookmarkFolderEditActivity
::
class
.
java
))
}
binding
.
tvCancel
.
setOnClickListener
{
noSelectUI
()
}
binding
.
llRemoveFolder
.
setOnClickListener
{
val
selectList
=
bookmarkAdapter
.
items
.
filter
{
it
.
isSelect
}
if
(
selectList
.
isEmpty
())
{
toast
(
"Please select a bookmark to move"
)
return
@setOnClickListener
}
if
(
selectList
.
any
{
it
.
isFolder
})
{
toast
(
"Folder cannot be moved"
)
return
@setOnClickListener
}
selectFolder
=
selectList
.
first
().
folder
launcher
.
launch
(
Intent
(
this
,
BookmarkFolderActivity
::
class
.
java
))
{
val
json
=
it
.
data
?.
extras
?.
getString
(
"Folder"
)
val
folder
=
Gson
().
fromJson
(
json
,
BookmarkBean
::
class
.
java
)
selectList
.
forEach
{
bookmarkBean
->
bookmarkBean
.
folderId
=
folder
.
id
bookmarkBean
.
folder
=
folder
.
name
SpBeanUtils
.
editSpBean
(
BOOKMARK_SP_KEY
,
bookmarkBean
)
}
initBookmarkData
()
noSelectUI
()
}
//
val selectList = bookmarkAdapter.items.filter { it.isSelect }
//
if (selectList.isEmpty()) {
//
toast("Please select a bookmark to move")
//
return@setOnClickListener
//
}
//
if (selectList.any { it.isFolder }) {
//
toast("Folder cannot be moved")
//
return@setOnClickListener
//
}
//
selectFolder = selectList.first().folder
//
launcher.launch(Intent(this, BookmarkFolderActivity::class.java)) {
//
val json = it.data?.extras?.getString("Folder")
//
val folder = Gson().fromJson(json, BookmarkBean::class.java)
//
selectList.forEach { bookmarkBean ->
//
bookmarkBean.folderId = folder.id
//
bookmarkBean.folder = folder.name
//
SpBeanUtils.editSpBean(BOOKMARK_SP_KEY, bookmarkBean)
//
}
////
initBookmarkData()
//
noSelectUI()
//
}
}
}
private
fun
changeBookmark
()
{
binding
.
tvTabBookmark
.
isSelected
=
true
binding
.
tvTabHistory
.
isSelected
=
false
binding
.
ivNewFolder
.
isVisible
=
true
binding
.
ivDelete
.
isVisible
=
false
currentTab
=
BOOKMARK_TAB
}
private
fun
changeHistory
()
{
binding
.
tvTabHistory
.
isSelected
=
true
binding
.
tvTabBookmark
.
isSelected
=
false
binding
.
ivNewFolder
.
isVisible
=
false
binding
.
ivDelete
.
isVisible
=
true
currentTab
=
HISTORY_TAB
}
override
fun
onResume
()
{
super
.
onResume
()
}
@SuppressLint
(
"NotifyDataSetChanged"
)
private
fun
selectUI
()
{
fun
selectUI
()
{
binding
.
flFanhui
.
visibility
=
View
.
GONE
binding
.
flTab
.
visibility
=
View
.
GONE
binding
.
tvCancel
.
visibility
=
View
.
VISIBLE
binding
.
ivNewFolder
.
visibility
=
View
.
GONE
binding
.
flOperation
.
visibility
=
View
.
VISIBLE
bookmarkAdapter
.
showSelector
=
true
bookmarkAdapter
.
items
.
forEach
{
it
.
isSelect
=
false
}
bookmarkAdapter
.
notifyDataSetChanged
()
bookmark
Fragment
.
bookmark
Adapter
.
showSelector
=
true
bookmark
Fragment
.
bookmark
Adapter
.
items
.
forEach
{
it
.
isSelect
=
false
}
bookmark
Fragment
.
bookmark
Adapter
.
notifyDataSetChanged
()
}
@SuppressLint
(
"NotifyDataSetChanged"
)
private
fun
noSelectUI
()
{
fun
noSelectUI
()
{
binding
.
tvCancel
.
visibility
=
View
.
GONE
binding
.
flFanhui
.
visibility
=
View
.
VISIBLE
binding
.
flTab
.
visibility
=
View
.
VISIBLE
binding
.
ivNewFolder
.
visibility
=
View
.
VISIBLE
binding
.
flOperation
.
visibility
=
View
.
GONE
bookmarkAdapter
.
showSelector
=
false
bookmarkAdapter
.
notifyDataSetChanged
()
bookmark
Fragment
.
bookmark
Adapter
.
showSelector
=
false
bookmark
Fragment
.
bookmark
Adapter
.
notifyDataSetChanged
()
}
companion
object
{
...
...
@@ -254,4 +174,92 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() {
private
val
HISTORY_TAB
=
"history_tab"
}
// bookmarkAdapter = BookmarkAdapter()
// bookmarkAdapter.changeFolderAction = { folderId ->
// val list = bookmarkList.filter { it.folderId == folderId }
// binding.llEmpty.isVisible = list.isEmpty()
// bookmarkAdapter.submitList(list)
// }
// bookmarkAdapter.moreAction = { view, bean ->
// showBookmarkMoreDialog(
// view,
// bean.isFolder,
// //新开
// openNewTab = {
// startActivity(Intent(this, WebBrowserActivity::class.java).apply {
// putExtra("url", bean.url)
// })
// },
// //删除
// deleteAction = {
// if (bean.isFolder) {//书签目录
// val desc = "Delete folder [${bean.name}] and the bookmarks in the folder?"
// showDeleteTipDialog(desc) {
// //删除书签目录
// SpBeanUtils.deleteSpBeanCondition(BOOKMARK_SP_KEY, bean.id)
// bookmarkList.remove(bean)
// bookmarkAdapter.remove(bean)
//
// //删除目录下书签
// val subBeanList = bookmarkList.filter { it.folder == bean.name }
// subBeanList.forEach { subBean ->
// SpBeanUtils.deleteSpBeanCondition(BOOKMARK_SP_KEY, subBean.id)
// bookmarkList.remove(subBean)
// //删除书签导航
// SpBeanUtils.deleteSpBeanCondition(BOOKMARK_NAV_SP_KEY, bean.id)
// }
// }
// } else {//书签直接删除
// SpBeanUtils.deleteSpBeanCondition(BOOKMARK_SP_KEY, bean.id)
// bookmarkList.remove(bean)
// bookmarkAdapter.remove(bean)
// //删除书签导航
// SpBeanUtils.deleteSpBeanCondition(BOOKMARK_NAV_SP_KEY, bean.id)
// }
// },
// //编辑
// editAction = {
// BookmarkFolderEditActivity.editFolder = bean
// launcher.launch(Intent(Intent(this, BookmarkFolderEditActivity::class.java)))
// },
// //添加导航
// addNavAction = {
// SpBeanUtils.addSpBean(BOOKMARK_NAV_SP_KEY, bean)
// },
// //选择
// selectAction = {
// selectUI()
// }
// )
// }
// private fun initHistoryData() {
// historyList.clear()
// val list = SpBeanUtils.getSpBeanList(HISTORY_SP_KEY)
// val gson = Gson()
// val item = list.map { gson.fromJson(it, HistoryBean::class.java) }
//
// val time = ""
// item.sortedBy { it.time }.forEach {
// if (time != it.time.toFormatTime()) {
// it.showTime = true
// }
// historyList.add(it)
// }
// }
// private fun initBookmarkData() {
// bookmarkList.clear()
// val list = SpBeanUtils.getSpBeanList(BOOKMARK_SP_KEY)
// val gson = Gson()
// val items = list.map { gson.fromJson(it, BookmarkBean::class.java) }
//
// bookmarkList.addAll(items)
// bookmarkAdapter.currentFolderId = 0
// bookmarkAdapter.submitList(bookmarkList.filter { it.folderId == bookmarkAdapter.currentFolderId })
// binding.llEmpty.isVisible = items.isEmpty()
// }
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/bookmark/BookmarkFragment.kt
0 → 100644
View file @
251c0733
package
com.base.browserwhite.ui.activity.bookmark
import
android.annotation.SuppressLint
import
android.content.Intent
import
androidx.core.view.isVisible
import
com.base.browserwhite.bean.BookmarkBean
import
com.base.browserwhite.databinding.FragmentBookmarkBinding
import
com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import
com.base.browserwhite.ui.fragment.BaseFragment
import
com.base.browserwhite.ui.views.BookmarkDialog.showBookmarkMoreDialog
import
com.base.browserwhite.ui.views.DialogViews.showDeleteTipDialog
import
com.base.browserwhite.utils.SpBeanUtils
import
com.google.gson.Gson
class
BookmarkFragment
:
BaseFragment
<
FragmentBookmarkBinding
>()
{
override
val
binding
:
FragmentBookmarkBinding
by
lazy
{
FragmentBookmarkBinding
.
inflate
(
layoutInflater
)
}
lateinit
var
bookmarkAdapter
:
BookmarkAdapter
private
val
bookmarkList
=
arrayListOf
<
BookmarkBean
>()
@SuppressLint
(
"NotifyDataSetChanged"
)
override
fun
setView
()
{
bookmarkAdapter
=
BookmarkAdapter
()
binding
.
rv
.
adapter
=
bookmarkAdapter
bookmarkAdapter
.
changeFolderAction
=
{
folderId
->
val
list
=
bookmarkList
.
filter
{
it
.
folderId
==
folderId
}
binding
.
llEmpty
.
isVisible
=
list
.
isEmpty
()
bookmarkAdapter
.
submitList
(
list
)
}
bookmarkAdapter
.
moreAction
=
{
view
,
bean
->
requireContext
().
showBookmarkMoreDialog
(
view
,
bean
.
isFolder
,
//新开
openNewTab
=
{
startActivity
(
Intent
(
requireContext
(),
WebBrowserActivity
::
class
.
java
).
apply
{
putExtra
(
"url"
,
bean
.
url
)
})
},
//删除
deleteAction
=
{
if
(
bean
.
isFolder
)
{
//书签目录
val
desc
=
"Delete folder [${bean.name}] and the bookmarks in the folder?"
requireContext
().
showDeleteTipDialog
(
desc
)
{
//删除书签目录
SpBeanUtils
.
deleteSpBeanCondition
(
SpBeanUtils
.
BOOKMARK_SP_KEY
,
bean
.
id
)
bookmarkList
.
remove
(
bean
)
bookmarkAdapter
.
remove
(
bean
)
//删除目录下书签
val
subBeanList
=
bookmarkList
.
filter
{
it
.
folder
==
bean
.
name
}
subBeanList
.
forEach
{
subBean
->
SpBeanUtils
.
deleteSpBeanCondition
(
SpBeanUtils
.
BOOKMARK_SP_KEY
,
subBean
.
id
)
bookmarkList
.
remove
(
subBean
)
//删除书签导航
SpBeanUtils
.
deleteSpBeanCondition
(
SpBeanUtils
.
BOOKMARK_NAV_SP_KEY
,
bean
.
id
)
}
}
}
else
{
//书签直接删除
SpBeanUtils
.
deleteSpBeanCondition
(
SpBeanUtils
.
BOOKMARK_SP_KEY
,
bean
.
id
)
bookmarkList
.
remove
(
bean
)
bookmarkAdapter
.
remove
(
bean
)
//删除书签导航
SpBeanUtils
.
deleteSpBeanCondition
(
SpBeanUtils
.
BOOKMARK_NAV_SP_KEY
,
bean
.
id
)
}
},
//编辑
editAction
=
{
BookmarkFolderEditActivity
.
editFolder
=
bean
val
launcher
=
(
requireActivity
()
as
BookmarkActivity
).
launcher
launcher
.
launch
(
Intent
(
Intent
(
requireContext
(),
BookmarkFolderEditActivity
::
class
.
java
)))
},
//添加导航
addNavAction
=
{
SpBeanUtils
.
addSpBean
(
SpBeanUtils
.
BOOKMARK_NAV_SP_KEY
,
bean
)
},
//选择
selectAction
=
{
(
requireActivity
()
as
BookmarkActivity
).
selectUI
()
}
)
}
initData
()
}
private
fun
initData
()
{
bookmarkList
.
clear
()
val
list
=
SpBeanUtils
.
getSpBeanList
(
SpBeanUtils
.
BOOKMARK_SP_KEY
)
val
gson
=
Gson
()
val
items
=
list
.
map
{
gson
.
fromJson
(
it
,
BookmarkBean
::
class
.
java
)
}
bookmarkList
.
addAll
(
items
)
bookmarkAdapter
.
currentFolderId
=
0
bookmarkAdapter
.
submitList
(
bookmarkList
.
filter
{
it
.
folderId
==
bookmarkAdapter
.
currentFolderId
})
binding
.
llEmpty
.
isVisible
=
items
.
isEmpty
()
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/bookmark/HistoryFragment.kt
0 → 100644
View file @
251c0733
package
com.base.browserwhite.ui.activity.bookmark
import
com.base.browserwhite.bean.HistoryBean
import
com.base.browserwhite.databinding.FragmentHistoryBinding
import
com.base.browserwhite.ui.fragment.BaseFragment
import
com.base.browserwhite.utils.KotlinExt.toFormatTime
import
com.base.browserwhite.utils.SpBeanUtils
import
com.google.gson.Gson
class
HistoryFragment
:
BaseFragment
<
FragmentHistoryBinding
>()
{
private
lateinit
var
historyAdapter
:
HistoryAdapter
private
val
historyList
=
arrayListOf
<
HistoryBean
>()
override
val
binding
:
FragmentHistoryBinding
by
lazy
{
FragmentHistoryBinding
.
inflate
(
layoutInflater
)
}
override
fun
setView
()
{
historyAdapter
=
HistoryAdapter
()
binding
.
rv
.
adapter
=
historyAdapter
initData
()
}
private
fun
initData
()
{
historyList
.
clear
()
val
list
=
SpBeanUtils
.
getSpBeanList
(
SpBeanUtils
.
HISTORY_SP_KEY
)
val
gson
=
Gson
()
val
item
=
list
.
map
{
gson
.
fromJson
(
it
,
HistoryBean
::
class
.
java
)
}
val
time
=
""
item
.
sortedBy
{
it
.
time
}.
forEach
{
if
(
time
!=
it
.
time
.
toFormatTime
())
{
it
.
showTime
=
true
}
historyList
.
add
(
it
)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/feedback/FeedbackActivity.kt
View file @
251c0733
package
com.base.browserwhite.ui.activity.feedback
import
android.annotation.SuppressLint
import
android.graphics.Color
import
androidx.core.view.updatePadding
import
androidx.core.widget.addTextChangedListener
import
com.base.browserwhite.databinding.ActivityFeedbackBinding
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.utils.BarUtils
...
...
@@ -19,5 +21,23 @@ class FeedbackActivity : BaseActivity<ActivityFeedbackBinding>() {
BarUtils
.
setStatusBarColor
(
this
,
Color
.
WHITE
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
}
@SuppressLint
(
"SetTextI18n"
)
override
fun
initListener
()
{
super
.
initListener
()
binding
.
edit
.
addTextChangedListener
{
binding
.
tvNumber
.
text
=
"${it?.toString()?.length ?: 0}/500"
binding
.
tvSubmit
.
isEnabled
=
!
it
.
isNullOrEmpty
()
}
binding
.
editEmail
.
addTextChangedListener
{
binding
.
tvSubmit
.
isEnabled
=
!
it
.
isNullOrEmpty
()
}
binding
.
fl1
.
setOnClickListener
{
}
}
}
app/src/main/res/drawable/bg_0571ed_18.xml
0 → 100644
View file @
251c0733
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#0571ED"
/>
<corners
android:radius=
"18dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/bg_border_selector_submit.xml
0 → 100644
View file @
251c0733
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:drawable=
"@drawable/bg_f3f4f6_18"
android:state_enabled=
"false"
/>
<item
android:drawable=
"@drawable/bg_0571ed_18"
android:state_enabled=
"true"
/>
</selector>
\ No newline at end of file
app/src/main/res/layout/activity_about.xml
View file @
251c0733
...
...
@@ -9,14 +9,15 @@
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"385dp"
android:background=
"@mipmap/aboutbg"
app:layout_constraintTop_toTopOf=
"parent"
>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"
center_vertical|
start"
android:layout_marginVertical=
"
10
dp"
android:layout_gravity=
"start"
android:layout_marginVertical=
"
45
dp"
android:layout_marginStart=
"10dp"
>
<FrameLayout
...
...
@@ -44,7 +45,55 @@
</LinearLayout>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"160dp"
android:orientation=
"vertical"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:src=
"@mipmap/alogo"
tools:ignore=
"ContentDescription"
/>
<TextView
android:id=
"@+id/tv_app_name"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"35dp"
android:textColor=
"@color/black"
android:textSize=
"22sp"
tools:text=
"Al Browser&Privacy"
/>
<TextView
android:id=
"@+id/tv_version"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"15dp"
android:textColor=
"#666666"
android:textSize=
"15sp"
tools:text=
"v1.0.0"
/>
</LinearLayout>
</FrameLayout>
<TextView
android:id=
"@+id/tv_privacy"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"25dp"
android:text=
"Privacy Policy"
android:textColor=
"#0571ed"
android:textSize=
"15sp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
tools:ignore=
"HardcodedText"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/activity_bookmark.xml
View file @
251c0733
...
...
@@ -111,60 +111,31 @@
android:src=
"@mipmap/tianjia_bookmark"
android:textColor=
"#AEAEB0"
android:textSize=
"16sp"
android:visibility=
"gone"
tools:ignore=
"ContentDescription,HardcodedText"
/>
<ImageView
android:id=
"@+id/iv_delete"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|end"
android:layout_marginEnd=
"20dp"
android:gravity=
"center"
android:src=
"@mipmap/h_del_history"
android:textColor=
"#AEAEB0"
android:textSize=
"16sp"
android:visibility=
"gone"
tools:ignore=
"ContentDescription,HardcodedText"
/>
</FrameLayout>
<SearchView
android:id=
"@+id/searchView"
android:layout_width=
"match_parent"
android:layout_height=
"44dp"
android:layout_marginHorizontal=
"15dp"
android:layout_marginTop=
"6dp"
android:background=
"@drawable/bg_eef1f6_15"
android:queryHint=
"Search"
/>
<FrameLayout
<androidx.viewpager2.widget.ViewPager2
android:id=
"@+id/viewPager2"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_marginVertical=
"10dp"
android:layout_weight=
"1"
tools:ignore=
"UselessLeaf"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem=
"@layout/item_bookmark"
/>
<LinearLayout
android:id=
"@+id/ll_empty"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:orientation=
"vertical"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:src=
"@mipmap/nobookmark"
tools:ignore=
"ContentDescription"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"16dp"
android:text=
"NO Bookmark"
android:textColor=
"#828282"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</FrameLayout>
android:layout_weight=
"1"
/>
<FrameLayout
android:id=
"@+id/fl_operation"
...
...
app/src/main/res/layout/activity_feedback.xml
View file @
251c0733
...
...
@@ -48,12 +48,12 @@
</LinearLayout>
<TextView
android:id=
"@+id/
iv_delete
"
android:id=
"@+id/
tv_submit
"
android:layout_width=
"90dp"
android:layout_height=
"35dp"
android:layout_gravity=
"center_vertical|end"
android:layout_marginEnd=
"16dp"
android:background=
"@drawable/bg_
f3f4f6_18
"
android:background=
"@drawable/bg_
border_selector_save
"
android:enabled=
"false"
android:gravity=
"center"
android:src=
"@drawable/bg_delete_download"
...
...
@@ -89,10 +89,12 @@
android:background=
"@null"
android:gravity=
"top"
android:hint=
"Write down your question"
android:maxLength=
"500"
tools:ignore=
"Autofill,HardcodedText,TextFields"
/>
<TextView
android:id=
"@+id/tv_number"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"end"
...
...
@@ -156,6 +158,12 @@
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:id=
"@+id/iv_1"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:ignore=
"ContentDescription"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
...
...
@@ -163,6 +171,7 @@
android:src=
"@mipmap/taijian_feedback"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
<FrameLayout
...
...
@@ -176,6 +185,12 @@
app:layout_constraintStart_toEndOf=
"@+id/fl_1"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:id=
"@+id/iv_2"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:ignore=
"ContentDescription"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
...
...
@@ -196,6 +211,12 @@
app:layout_constraintStart_toEndOf=
"@id/fl_2"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:id=
"@+id/iv_"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:ignore=
"ContentDescription"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
...
...
app/src/main/res/layout/activity_scan_qrc.xml
View file @
251c0733
...
...
@@ -35,7 +35,7 @@
android:layout_height=
"wrap_content"
android:layout_marginTop=
"50dp"
android:layout_marginEnd=
"16dp"
android:src=
"@mipmap/
w_guanbi
"
android:src=
"@mipmap/
s_guanbi_sqrc
"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:ignore=
"ContentDescription"
/>
...
...
app/src/main/res/layout/dialog_my_account.xml
View file @
251c0733
...
...
@@ -342,7 +342,8 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/cl_feedback"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
android:visibility=
"gone"
>
<FrameLayout
android:id=
"@+id/fl_feedback"
...
...
app/src/main/res/layout/fragment_bookmark.xml
0 → 100644
View file @
251c0733
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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=
"match_parent"
android:orientation=
"vertical"
tools:context=
".ui.activity.bookmark.BookmarkFragment"
>
<SearchView
android:id=
"@+id/searchView"
android:layout_width=
"match_parent"
android:layout_height=
"44dp"
android:layout_marginHorizontal=
"15dp"
android:layout_marginTop=
"6dp"
android:background=
"@drawable/bg_eef1f6_15"
android:queryHint=
"Search"
/>
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_marginVertical=
"10dp"
android:layout_weight=
"1"
tools:ignore=
"UselessLeaf"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem=
"@layout/item_bookmark"
/>
<LinearLayout
android:id=
"@+id/ll_empty"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:orientation=
"vertical"
android:visibility=
"gone"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:src=
"@mipmap/nobookmark"
tools:ignore=
"ContentDescription"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"16dp"
android:text=
"NO Bookmark"
android:textColor=
"#828282"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_history.xml
0 → 100644
View file @
251c0733
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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=
"match_parent"
tools:context=
".ui.activity.bookmark.HistoryFragment"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem=
"@layout/item_bookmark_history"
/>
</FrameLayout>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/aboutbg.png
0 → 100644
View file @
251c0733
174 KB
app/src/main/res/mipmap-xxhdpi/alogo.png
0 → 100644
View file @
251c0733
34.1 KB
app/src/main/res/mipmap-xxhdpi/h_del_history.png
0 → 100644
View file @
251c0733
2.08 KB
app/src/main/res/mipmap-xxhdpi/s_guanbi_sqrc.png
0 → 100644
View file @
251c0733
2.91 KB
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