Commit 24040005 authored by wanglei's avatar wanglei

...

parent c5fea847
...@@ -102,6 +102,7 @@ dependencies { ...@@ -102,6 +102,7 @@ dependencies {
implementation("com.mikhaellopez:circularprogressbar:3.1.0") implementation("com.mikhaellopez:circularprogressbar:3.1.0")
implementation("com.github.zhpanvip:viewpagerindicator:1.2.3") implementation("com.github.zhpanvip:viewpagerindicator:1.2.3")
implementation("com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6") implementation("com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6")
implementation("com.google.android.flexbox:flexbox:3.0.0")
//相机 //相机
val cameraxVersion = "1.2.2" val cameraxVersion = "1.2.2"
...@@ -125,7 +126,6 @@ dependencies { ...@@ -125,7 +126,6 @@ dependencies {
implementation("com.liulishuo.filedownloader:library:1.7.7") implementation("com.liulishuo.filedownloader:library:1.7.7")
//firebase //firebase
implementation(platform("com.google.firebase:firebase-bom:32.3.1")) implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
implementation("com.google.firebase:firebase-messaging") implementation("com.google.firebase:firebase-messaging")
......
...@@ -218,6 +218,7 @@ ...@@ -218,6 +218,7 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:theme="@style/MaterialComponentsTheme"
android:name=".ui.activity.search.SearchActivity" android:name=".ui.activity.search.SearchActivity"
android:exported="false" android:exported="false"
android:launchMode="singleTop" android:launchMode="singleTop"
......
package com.base.browserwhite.bean package com.base.browserwhite.bean
class SearchTipBean { class SearchRecordBean(
} val content:String
\ No newline at end of file ) :SpBean()
\ No newline at end of file
package com.base.browserwhite.ui.activity.bookmark package com.base.browserwhite.ui.activity.bookmark
import android.view.View
import com.base.browserwhite.bean.HistoryBean import com.base.browserwhite.bean.HistoryBean
import com.base.browserwhite.databinding.FragmentHistoryBinding import com.base.browserwhite.databinding.FragmentHistoryBinding
import com.base.browserwhite.ui.fragment.BaseFragment import com.base.browserwhite.ui.fragment.BaseFragment
......
...@@ -8,13 +8,16 @@ import android.content.Intent ...@@ -8,13 +8,16 @@ import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.os.Handler import android.os.Handler
import android.util.TypedValue import android.util.TypedValue
import android.view.Gravity
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import com.base.browserwhite.R import com.base.browserwhite.R
import com.base.browserwhite.bean.ConstObject import com.base.browserwhite.bean.ConstObject
import com.base.browserwhite.bean.ConstObject.searchEngineSp import com.base.browserwhite.bean.ConstObject.searchEngineSp
import com.base.browserwhite.bean.SearchRecordBean
import com.base.browserwhite.databinding.ActivitySearchBinding import com.base.browserwhite.databinding.ActivitySearchBinding
import com.base.browserwhite.help.SearchTipUtils.getSearchTip import com.base.browserwhite.help.SearchTipUtils.getSearchTip
import com.base.browserwhite.ui.activity.BaseActivity import com.base.browserwhite.ui.activity.BaseActivity
...@@ -22,11 +25,21 @@ import com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity ...@@ -22,11 +25,21 @@ import com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import com.base.browserwhite.utils.BarUtils.setStatusBarColor import com.base.browserwhite.utils.BarUtils.setStatusBarColor
import com.base.browserwhite.utils.BarUtils.setStatusBarLightMode import com.base.browserwhite.utils.BarUtils.setStatusBarLightMode
import com.base.browserwhite.utils.LinkSearchUtils import com.base.browserwhite.utils.LinkSearchUtils
import com.base.browserwhite.utils.SpBeanUtils
import com.base.browserwhite.utils.SpBeanUtils.SEARCH_RECORD_SP_KEY
import com.google.android.flexbox.FlexDirection
import com.google.android.flexbox.FlexWrap
import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.google.android.material.chip.Chip
import com.google.gson.Gson
class SearchActivity : BaseActivity<ActivitySearchBinding>() { class SearchActivity : BaseActivity<ActivitySearchBinding>() {
private lateinit var searchAdapter: SearchAdapter private lateinit var searchAdapter: SearchAdapter
private lateinit var searchRecordAdapter: SearchRecordAdapter
override val binding: ActivitySearchBinding by lazy { override val binding: ActivitySearchBinding by lazy {
ActivitySearchBinding.inflate(layoutInflater) ActivitySearchBinding.inflate(layoutInflater)
...@@ -55,7 +68,18 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -55,7 +68,18 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
} }
binding.rv.adapter = searchAdapter binding.rv.adapter = searchAdapter
searchRecordAdapter = SearchRecordAdapter()
val layoutManager = FlexboxLayoutManager(this)
// 设置主轴排列方向
layoutManager.flexDirection = FlexDirection.ROW
// 设置换行方式
layoutManager.flexWrap = FlexWrap.WRAP
// 设置水平对齐方式
layoutManager.justifyContent = JustifyContent.FLEX_START
binding.rvFlow.layoutManager = layoutManager
binding.rvFlow.adapter = searchAdapter
showSearchRecord()
} }
override fun initListener() { override fun initListener() {
...@@ -69,8 +93,11 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -69,8 +93,11 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
binding.tvCancel.visibility = View.VISIBLE binding.tvCancel.visibility = View.VISIBLE
binding.ivClear.visibility = View.GONE binding.ivClear.visibility = View.GONE
binding.tvSearch.visibility = View.GONE binding.tvSearch.visibility = View.GONE
showSearchRecord()
return@addTextChangedListener return@addTextChangedListener
} }
binding.rv.visibility = View.VISIBLE
binding.chipGroup.visibility = View.GONE
binding.tvCancel.visibility = View.GONE binding.tvCancel.visibility = View.GONE
binding.ivClear.visibility = View.VISIBLE binding.ivClear.visibility = View.VISIBLE
binding.tvSearch.visibility = View.VISIBLE binding.tvSearch.visibility = View.VISIBLE
...@@ -91,6 +118,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -91,6 +118,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
} }
binding.tvSearch.setOnClickListener { binding.tvSearch.setOnClickListener {
val content = binding.editWeb.text.toString() val content = binding.editWeb.text.toString()
SpBeanUtils.addSpBean(SEARCH_RECORD_SP_KEY, SearchRecordBean(content))
startActivity(Intent(this, WebBrowserActivity::class.java).apply { startActivity(Intent(this, WebBrowserActivity::class.java).apply {
putExtra("url", LinkSearchUtils.getSpSearchAction(content)) putExtra("url", LinkSearchUtils.getSpSearchAction(content))
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION) addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
...@@ -113,6 +141,23 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -113,6 +141,23 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
binding.tvCancel.setOnClickListener { binding.tvCancel.setOnClickListener {
onBackPressed() onBackPressed()
} }
// binding.chipGroup.setOnCheckedStateChangeListener { chipGroup, ints ->
// val id = ints[0]
// if (id == -1) {
//
// } else {
// val bean = searchRecordList.find { it.id == id.toLong() }
// if (bean != null) {
// startActivity(Intent(this, WebBrowserActivity::class.java).apply {
// putExtra("url", LinkSearchUtils.getSpSearchAction(bean.content))
// addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
// })
// chipGroup.isClickable = false
// }
// }
//
// }
} }
private fun querySearchTip(query: String) { private fun querySearchTip(query: String) {
...@@ -212,4 +257,52 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -212,4 +257,52 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
} }
} }
private val searchRecordList = arrayListOf<SearchRecordBean>()
private fun showSearchRecord() {
binding.chipGroup.visibility = View.VISIBLE
binding.rv.visibility = View.GONE
binding.rvFlow.visibility = View.VISIBLE
searchRecordList.clear()
val gson = Gson()
val list = SpBeanUtils.getSpBeanList(SEARCH_RECORD_SP_KEY).map {
gson.fromJson(it, SearchRecordBean::class.java)
}
searchRecordList.addAll(list)
searchRecordAdapter.submitList(searchRecordList)
list.forEach {
val chip = Chip(this)
chip.id = it.id.toInt()
chip.text = it.content
chip.setTextColor(Color.BLACK)
chip.textSize = 14f
chip.background = ContextCompat.getDrawable(this, R.drawable.bg_eef1f6_20)
chip.isCheckable = true
chip.isCheckedIconVisible = false
chip.height = this.resources.getDimensionPixelOffset(R.dimen.dp_40)
binding.chipGroup.addView(chip)
}
val deleteChip = Chip(this)
deleteChip.id = -1
deleteChip.text = ""
deleteChip.isCheckable = true
deleteChip.isCheckedIconVisible = false
deleteChip.isChipIconVisible = true
deleteChip.chipIcon = ContextCompat.getDrawable(this, R.mipmap.del_chip)
deleteChip.gravity = Gravity.CENTER
deleteChip.setChipIconSizeResource(R.dimen.dp_20)
deleteChip.iconStartPadding = this.resources.getDimension(R.dimen.dp_15)
deleteChip.height = this.resources.getDimensionPixelOffset(R.dimen.dp_40)
deleteChip.width = this.resources.getDimensionPixelOffset(R.dimen.dp_40)
binding.chipGroup.addView(deleteChip)
}
} }
package com.base.browserwhite.ui.activity.search
import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.browserwhite.R
import com.base.browserwhite.bean.SearchRecordBean
import com.base.browserwhite.databinding.ItemSearchrecordBinding
import com.base.browserwhite.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
class SearchRecordAdapter : BaseQuickAdapter<SearchRecordBean, SearchRecordAdapter.SearchRecordViewHolder>() {
inner class SearchRecordViewHolder(view: View) : ViewHolder(view) {
}
override fun onBindViewHolder(holder: SearchRecordViewHolder, position: Int, item: SearchRecordBean?) {
if (item == null) return
val binding = ItemSearchrecordBinding.bind(holder.itemView)
binding.tvContent.text = item.content
}
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): SearchRecordViewHolder {
return SearchRecordViewHolder(R.layout.item_searchrecord.inflate(parent))
}
}
\ No newline at end of file
...@@ -248,7 +248,6 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() { ...@@ -248,7 +248,6 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
} }
} }
private fun addNewWebSite(uri: String) { private fun addNewWebSite(uri: String) {
val myFragment = WebViewFragment().apply { url = uri } val myFragment = WebViewFragment().apply { url = uri }
val transaction: FragmentTransaction = supportFragmentManager.beginTransaction() val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
......
package com.base.browserwhite.ui.activity.webbrowser package com.base.browserwhite.ui.activity.webbrowser
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context
import android.net.Uri import android.net.Uri
import android.net.http.SslError import android.net.http.SslError
import android.view.View import android.view.View
...@@ -267,6 +268,10 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() { ...@@ -267,6 +268,10 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
} }
override fun onAttach(context: Context) {
super.onAttach(context)
}
private var isParsing: Boolean = false private var isParsing: Boolean = false
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
......
...@@ -9,6 +9,7 @@ object SpBeanUtils { ...@@ -9,6 +9,7 @@ object SpBeanUtils {
const val BOOKMARK_SP_KEY = "bookmark_sp_key"//书签 const val BOOKMARK_SP_KEY = "bookmark_sp_key"//书签
const val BOOKMARK_NAV_SP_KEY = "bookmark_nav_sp_key"//书签导航 const val BOOKMARK_NAV_SP_KEY = "bookmark_nav_sp_key"//书签导航
const val HISTORY_SP_KEY = "history_sp_key"//历史记录 const val HISTORY_SP_KEY = "history_sp_key"//历史记录
const val SEARCH_RECORD_SP_KEY = "search_record_sp_key"//搜索记录
fun getSpBeanList(key: String): List<String> { fun getSpBeanList(key: String): List<String> {
val sp = AppPreferences.getInstance().getString(key, "") val sp = AppPreferences.getInstance().getString(key, "")
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="20dp" />
<solid android:color="#EEF1F6" />
</shape>
\ No newline at end of file
...@@ -128,9 +128,25 @@ ...@@ -128,9 +128,25 @@
android:layout_marginVertical="10dp" android:layout_marginVertical="10dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_search_tip" /> tools:listitem="@layout/item_search_tip" />
</FrameLayout>
<com.google.android.material.chip.ChipGroup
android:id="@+id/chipGroup"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="30dp"
android:visibility="gone"
app:chipSpacingHorizontal="20dp"
app:singleSelection="true" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_flow"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
...@@ -141,9 +157,9 @@ ...@@ -141,9 +157,9 @@
<LinearLayout <LinearLayout
android:id="@+id/ll_fast_input_1" android:id="@+id/ll_fast_input_1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:paddingBottom="6dp" android:layout_height="wrap_content"
android:paddingTop="6dp" android:paddingTop="6dp"
android:layout_height="wrap_content"> android:paddingBottom="6dp">
<TextView <TextView
android:id="@+id/tv_dian" android:id="@+id/tv_dian"
......
...@@ -13,4 +13,5 @@ ...@@ -13,4 +13,5 @@
android:layout_height="match_parent" android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_bookmark_history" /> tools:listitem="@layout/item_bookmark_history" />
</FrameLayout> </FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/tv_content"
android:layout_height="match_parent"
android:background="@drawable/bg_eef1f6_20"
android:paddingHorizontal="15dp"
android:paddingVertical="12.5dp"
android:textColor="@color/black"
tools:text="www.youtube.com" />
...@@ -29,4 +29,7 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout ...@@ -29,4 +29,7 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
<dimen name="dp_250">250dp</dimen> <dimen name="dp_250">250dp</dimen>
<dimen name="dp_50">50dp</dimen> <dimen name="dp_50">50dp</dimen>
<dimen name="dp_100">100dp</dimen> <dimen name="dp_100">100dp</dimen>
<dimen name="sp_18">18sp</dimen>
<dimen name="dp_40">40dp</dimen>
<dimen name="dp_10">10dp</dimen>
</resources> </resources>
\ No newline at end of file
...@@ -21,4 +21,13 @@ ...@@ -21,4 +21,13 @@
<item name="android:background">@android:color/transparent</item> <item name="android:background">@android:color/transparent</item>
</style> </style>
<style name="MaterialComponentsTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#FAEA7A</item>
<item name="colorPrimaryDark">#FAB97B</item>
<item name="colorAccent">#A87EFA</item>
<!-- 其他自定义主题属性 -->
</style>
</resources> </resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<chip xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:chipIcon="@mipmap/del_chip">
</chip>
\ 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