Commit 251c0733 authored by wanglei's avatar wanglei

...

parent 44e0def0
package com.base.browserwhite.ui.activity.about 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.databinding.ActivityAboutBinding
import com.base.browserwhite.help.ConfigHelper
import com.base.browserwhite.ui.activity.BaseActivity import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.utils.BarUtils
class AboutActivity : BaseActivity<ActivityAboutBinding>() { class AboutActivity : BaseActivity<ActivityAboutBinding>() {
...@@ -10,9 +19,33 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() { ...@@ -10,9 +19,33 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
ActivityAboutBinding.inflate(layoutInflater) ActivityAboutBinding.inflate(layoutInflater)
} }
@SuppressLint("SetTextI18n")
override fun initView() { 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
...@@ -7,22 +7,12 @@ import android.view.View ...@@ -7,22 +7,12 @@ import android.view.View
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.browserwhite.bean.BookmarkBean import androidx.fragment.app.Fragment
import com.base.browserwhite.bean.HistoryBean import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.browserwhite.databinding.ActivityBookmarkBinding import com.base.browserwhite.databinding.ActivityBookmarkBinding
import com.base.browserwhite.ui.activity.BaseActivity 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.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>() { class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() {
...@@ -34,138 +24,53 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() { ...@@ -34,138 +24,53 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() {
ActivityBookmarkBinding.inflate(layoutInflater) ActivityBookmarkBinding.inflate(layoutInflater)
} }
private lateinit var bookmarkAdapter: BookmarkAdapter private val bookmarkFragment: BookmarkFragment by lazy {
private val bookmarkList = arrayListOf<BookmarkBean>() BookmarkFragment()
}
private val historyFragment: HistoryFragment by lazy {
HistoryFragment()
}
private lateinit var historyAdapter: HistoryAdapter private val fragments by lazy {
private val historyList = arrayListOf<HistoryBean>() mutableListOf(bookmarkFragment, historyFragment)
}
override fun initView() { override fun initView() {
BarUtils.setStatusBarLightMode(this, true) BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.WHITE) BarUtils.setStatusBarColor(this, Color.WHITE)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
bookmarkAdapter = BookmarkAdapter() binding.viewPager2.run {
bookmarkAdapter.changeFolderAction = { folderId -> adapter = object : FragmentStateAdapter(this@BookmarkActivity) {
val list = bookmarkList.filter { it.folderId == folderId } override fun getItemCount(): Int {
binding.llEmpty.isVisible = list.isEmpty() return fragments.size
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)
//删除目录下书签 override fun createFragment(position: Int): Fragment {
val subBeanList = bookmarkList.filter { it.folder == bean.name } return fragments[position]
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()
} }
)
}
historyAdapter = HistoryAdapter()
binding.viewPager2.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
noSelectUI()
if (position == 0) {
changeBookmark() changeBookmark()
} } else {
changeHistory()
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
}
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()
} }
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
onBackPressedDispatcher.addCallback { onBackPressedDispatcher.addCallback {
if (currentTab == BOOKMARK_TAB) { if (currentTab == BOOKMARK_TAB) {
if (bookmarkAdapter.canBeforeFolder()) { if (bookmarkFragment.bookmarkAdapter.canBeforeFolder()) {
bookmarkAdapter.beforeFolder() bookmarkFragment.bookmarkAdapter.beforeFolder()
} else { } else {
finishToMain() finishToMain()
} }
...@@ -181,72 +86,87 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() { ...@@ -181,72 +86,87 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() {
if (binding.tvTabBookmark.isSelected) { if (binding.tvTabBookmark.isSelected) {
return@setOnClickListener return@setOnClickListener
} }
binding.tvTabBookmark.isSelected = true binding.viewPager2.currentItem = 0
binding.tvTabHistory.isSelected = false
currentTab = BOOKMARK_TAB
changeBookmark()
} }
binding.tvTabBookmark.callOnClick()
binding.tvTabHistory.setOnClickListener { binding.tvTabHistory.setOnClickListener {
if (binding.tvTabHistory.isSelected) { if (binding.tvTabHistory.isSelected) {
return@setOnClickListener return@setOnClickListener
} }
binding.tvTabHistory.isSelected = true binding.viewPager2.currentItem = 1
binding.tvTabBookmark.isSelected = false
currentTab = HISTORY_TAB
changeHistory()
} }
binding.ivNewFolder.setOnClickListener { binding.ivNewFolder.setOnClickListener {
launcher.launch(Intent(this, BookmarkFolderEditActivity::class.java)) launcher.launch(Intent(this, BookmarkFolderEditActivity::class.java))
} }
binding.tvCancel.setOnClickListener { noSelectUI() } binding.tvCancel.setOnClickListener { noSelectUI() }
binding.llRemoveFolder.setOnClickListener { binding.llRemoveFolder.setOnClickListener {
val selectList = bookmarkAdapter.items.filter { it.isSelect } // val selectList = bookmarkAdapter.items.filter { it.isSelect }
if (selectList.isEmpty()) { // if (selectList.isEmpty()) {
toast("Please select a bookmark to move") // toast("Please select a bookmark to move")
return@setOnClickListener // 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()
// }
} }
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") @SuppressLint("NotifyDataSetChanged")
private fun selectUI() { fun selectUI() {
binding.flFanhui.visibility = View.GONE binding.flFanhui.visibility = View.GONE
binding.flTab.visibility = View.GONE binding.flTab.visibility = View.GONE
binding.tvCancel.visibility = View.VISIBLE binding.tvCancel.visibility = View.VISIBLE
binding.ivNewFolder.visibility = View.GONE binding.ivNewFolder.visibility = View.GONE
binding.flOperation.visibility = View.VISIBLE binding.flOperation.visibility = View.VISIBLE
bookmarkAdapter.showSelector = true bookmarkFragment.bookmarkAdapter.showSelector = true
bookmarkAdapter.items.forEach { it.isSelect = false } bookmarkFragment.bookmarkAdapter.items.forEach { it.isSelect = false }
bookmarkAdapter.notifyDataSetChanged() bookmarkFragment.bookmarkAdapter.notifyDataSetChanged()
} }
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
private fun noSelectUI() { fun noSelectUI() {
binding.tvCancel.visibility = View.GONE binding.tvCancel.visibility = View.GONE
binding.flFanhui.visibility = View.VISIBLE binding.flFanhui.visibility = View.VISIBLE
binding.flTab.visibility = View.VISIBLE binding.flTab.visibility = View.VISIBLE
binding.ivNewFolder.visibility = View.VISIBLE binding.ivNewFolder.visibility = View.VISIBLE
binding.flOperation.visibility = View.GONE binding.flOperation.visibility = View.GONE
bookmarkAdapter.showSelector = false bookmarkFragment.bookmarkAdapter.showSelector = false
bookmarkAdapter.notifyDataSetChanged() bookmarkFragment.bookmarkAdapter.notifyDataSetChanged()
} }
companion object { companion object {
...@@ -254,4 +174,92 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() { ...@@ -254,4 +174,92 @@ class BookmarkActivity : BaseActivity<ActivityBookmarkBinding>() {
private val HISTORY_TAB = "history_tab" 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
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
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
package com.base.browserwhite.ui.activity.feedback package com.base.browserwhite.ui.activity.feedback
import android.annotation.SuppressLint
import android.graphics.Color import android.graphics.Color
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.core.widget.addTextChangedListener
import com.base.browserwhite.databinding.ActivityFeedbackBinding import com.base.browserwhite.databinding.ActivityFeedbackBinding
import com.base.browserwhite.ui.activity.BaseActivity import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.utils.BarUtils import com.base.browserwhite.utils.BarUtils
...@@ -19,5 +21,23 @@ class FeedbackActivity : BaseActivity<ActivityFeedbackBinding>() { ...@@ -19,5 +21,23 @@ class FeedbackActivity : BaseActivity<ActivityFeedbackBinding>() {
BarUtils.setStatusBarColor(this, Color.WHITE) BarUtils.setStatusBarColor(this, Color.WHITE)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) 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 {
}
} }
} }
<?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
<?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
...@@ -9,14 +9,15 @@ ...@@ -9,14 +9,15 @@
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="385dp"
android:background="@mipmap/aboutbg"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start" android:layout_gravity="start"
android:layout_marginVertical="10dp" android:layout_marginVertical="45dp"
android:layout_marginStart="10dp"> android:layout_marginStart="10dp">
<FrameLayout <FrameLayout
...@@ -44,7 +45,55 @@ ...@@ -44,7 +45,55 @@
</LinearLayout> </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&amp;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> </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> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -111,60 +111,31 @@ ...@@ -111,60 +111,31 @@
android:src="@mipmap/tianjia_bookmark" android:src="@mipmap/tianjia_bookmark"
android:textColor="#AEAEB0" android:textColor="#AEAEB0"
android:textSize="16sp" android:textSize="16sp"
android:visibility="gone"
tools:ignore="ContentDescription,HardcodedText" /> 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
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 <ImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_vertical|end"
android:src="@mipmap/nobookmark" android:layout_marginEnd="20dp"
tools:ignore="ContentDescription" /> android:gravity="center"
android:src="@mipmap/h_del_history"
android:textColor="#AEAEB0"
android:textSize="16sp"
android:visibility="gone"
tools:ignore="ContentDescription,HardcodedText" />
<TextView </FrameLayout>
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> <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" />
<FrameLayout <FrameLayout
android:id="@+id/fl_operation" android:id="@+id/fl_operation"
......
...@@ -48,12 +48,12 @@ ...@@ -48,12 +48,12 @@
</LinearLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/iv_delete" android:id="@+id/tv_submit"
android:layout_width="90dp" android:layout_width="90dp"
android:layout_height="35dp" android:layout_height="35dp"
android:layout_gravity="center_vertical|end" android:layout_gravity="center_vertical|end"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:background="@drawable/bg_f3f4f6_18" android:background="@drawable/bg_border_selector_save"
android:enabled="false" android:enabled="false"
android:gravity="center" android:gravity="center"
android:src="@drawable/bg_delete_download" android:src="@drawable/bg_delete_download"
...@@ -89,10 +89,12 @@ ...@@ -89,10 +89,12 @@
android:background="@null" android:background="@null"
android:gravity="top" android:gravity="top"
android:hint="Write down your question" android:hint="Write down your question"
android:maxLength="500"
tools:ignore="Autofill,HardcodedText,TextFields" /> tools:ignore="Autofill,HardcodedText,TextFields" />
<TextView <TextView
android:id="@+id/tv_number"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end" android:layout_gravity="end"
...@@ -156,6 +158,12 @@ ...@@ -156,6 +158,12 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="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 <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
...@@ -163,6 +171,7 @@ ...@@ -163,6 +171,7 @@
android:src="@mipmap/taijian_feedback" android:src="@mipmap/taijian_feedback"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
</FrameLayout> </FrameLayout>
<FrameLayout <FrameLayout
...@@ -176,6 +185,12 @@ ...@@ -176,6 +185,12 @@
app:layout_constraintStart_toEndOf="@+id/fl_1" app:layout_constraintStart_toEndOf="@+id/fl_1"
app:layout_constraintTop_toTopOf="parent"> 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 <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
...@@ -196,6 +211,12 @@ ...@@ -196,6 +211,12 @@
app:layout_constraintStart_toEndOf="@id/fl_2" app:layout_constraintStart_toEndOf="@id/fl_2"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="50dp" android:layout_marginTop="50dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:src="@mipmap/w_guanbi" android:src="@mipmap/s_guanbi_sqrc"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
......
...@@ -342,7 +342,8 @@ ...@@ -342,7 +342,8 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_feedback" android:id="@+id/cl_feedback"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:visibility="gone">
<FrameLayout <FrameLayout
android:id="@+id/fl_feedback" android:id="@+id/fl_feedback"
......
<?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
<?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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment