Commit 24040005 authored by wanglei's avatar wanglei

...

parent c5fea847
......@@ -102,6 +102,7 @@ dependencies {
implementation("com.mikhaellopez:circularprogressbar:3.1.0")
implementation("com.github.zhpanvip:viewpagerindicator:1.2.3")
implementation("com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6")
implementation("com.google.android.flexbox:flexbox:3.0.0")
//相机
val cameraxVersion = "1.2.2"
......@@ -125,7 +126,6 @@ dependencies {
implementation("com.liulishuo.filedownloader:library:1.7.7")
//firebase
implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
implementation("com.google.firebase:firebase-messaging")
......
......@@ -218,6 +218,7 @@
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:theme="@style/MaterialComponentsTheme"
android:name=".ui.activity.search.SearchActivity"
android:exported="false"
android:launchMode="singleTop"
......
package com.base.browserwhite.bean
class SearchTipBean {
}
\ No newline at end of file
class SearchRecordBean(
val content:String
) :SpBean()
\ No newline at end of file
package com.base.browserwhite.ui.activity.bookmark
import android.view.View
import com.base.browserwhite.bean.HistoryBean
import com.base.browserwhite.databinding.FragmentHistoryBinding
import com.base.browserwhite.ui.fragment.BaseFragment
......
......@@ -8,13 +8,16 @@ import android.content.Intent
import android.graphics.Color
import android.os.Handler
import android.util.TypedValue
import android.view.Gravity
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener
import com.base.browserwhite.R
import com.base.browserwhite.bean.ConstObject
import com.base.browserwhite.bean.ConstObject.searchEngineSp
import com.base.browserwhite.bean.SearchRecordBean
import com.base.browserwhite.databinding.ActivitySearchBinding
import com.base.browserwhite.help.SearchTipUtils.getSearchTip
import com.base.browserwhite.ui.activity.BaseActivity
......@@ -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.setStatusBarLightMode
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>() {
private lateinit var searchAdapter: SearchAdapter
private lateinit var searchRecordAdapter: SearchRecordAdapter
override val binding: ActivitySearchBinding by lazy {
ActivitySearchBinding.inflate(layoutInflater)
......@@ -55,7 +68,18 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
}
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() {
......@@ -69,8 +93,11 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
binding.tvCancel.visibility = View.VISIBLE
binding.ivClear.visibility = View.GONE
binding.tvSearch.visibility = View.GONE
showSearchRecord()
return@addTextChangedListener
}
binding.rv.visibility = View.VISIBLE
binding.chipGroup.visibility = View.GONE
binding.tvCancel.visibility = View.GONE
binding.ivClear.visibility = View.VISIBLE
binding.tvSearch.visibility = View.VISIBLE
......@@ -91,6 +118,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
}
binding.tvSearch.setOnClickListener {
val content = binding.editWeb.text.toString()
SpBeanUtils.addSpBean(SEARCH_RECORD_SP_KEY, SearchRecordBean(content))
startActivity(Intent(this, WebBrowserActivity::class.java).apply {
putExtra("url", LinkSearchUtils.getSpSearchAction(content))
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
......@@ -113,6 +141,23 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
binding.tvCancel.setOnClickListener {
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) {
......@@ -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>() {
}
}
private fun addNewWebSite(uri: String) {
val myFragment = WebViewFragment().apply { url = uri }
val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
......
package com.base.browserwhite.ui.activity.webbrowser
import android.annotation.SuppressLint
import android.content.Context
import android.net.Uri
import android.net.http.SslError
import android.view.View
......@@ -267,6 +268,10 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
}
override fun onAttach(context: Context) {
super.onAttach(context)
}
private var isParsing: Boolean = false
@SuppressLint("NotifyDataSetChanged")
......
......@@ -9,6 +9,7 @@ object SpBeanUtils {
const val BOOKMARK_SP_KEY = "bookmark_sp_key"//书签
const val BOOKMARK_NAV_SP_KEY = "bookmark_nav_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> {
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 @@
android:layout_marginVertical="10dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
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
android:layout_width="wrap_content"
android:layout_height="wrap_content"
......@@ -141,9 +157,9 @@
<LinearLayout
android:id="@+id/ll_fast_input_1"
android:layout_width="wrap_content"
android:paddingBottom="6dp"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:layout_height="wrap_content">
android:paddingBottom="6dp">
<TextView
android:id="@+id/tv_dian"
......
......@@ -13,4 +13,5 @@
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_bookmark_history" />
</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
<dimen name="dp_250">250dp</dimen>
<dimen name="dp_50">50dp</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>
\ No newline at end of file
......@@ -21,4 +21,13 @@
<item name="android:background">@android:color/transparent</item>
</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>
\ 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