Commit ca612317 authored by wanglei's avatar wanglei

...

parent ba9b5a2b
This diff is collapsed.
package com.base.browserwhite.ui.activity.webbrowser
import android.graphics.Color
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import com.base.browserwhite.R
import com.base.browserwhite.databinding.ActivityWebBrowserBinding
import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.ui.fragment.WebViewFragment
import com.base.browserwhite.utils.BarUtils
......@@ -12,11 +18,68 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
override val binding: ActivityWebBrowserBinding by lazy {
ActivityWebBrowserBinding.inflate(layoutInflater)
}
private val fragmentList = arrayListOf<Fragment>()
private var currentFragment: WebViewFragment? = null
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
val uri = intent.extras?.getString("uri") ?: ""
binding.editWeb.setText(uri)
addNewWebSite(uri)
}
private fun checkLeftRight() {
if (currentFragment?.canGoBack() == true) {
binding.ivLeft.setImageResource(R.mipmap.left_s)
} else {
binding.ivLeft.setImageResource(R.mipmap.left_n)
}
if (currentFragment?.canGoForward() == true) {
binding.ivRight.setImageResource(R.mipmap.right_s)
} else {
binding.ivRight.setImageResource(R.mipmap.right_n)
}
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
if (currentFragment?.canGoBack() == true) {
currentFragment?.goBack()
} else {
finishToMain()
}
}
binding.ivLeft.setOnClickListener {
if (currentFragment?.canGoBack() == true) {
currentFragment?.goBack()
}
}
binding.ivRight.setOnClickListener {
if (currentFragment?.canGoForward() == true) {
currentFragment?.goForward()
}
}
}
private fun addNewWebSite(uri: String) {
val myFragment = WebViewFragment(uri)
val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.container, myFragment)
transaction.commit()
fragmentList.add(myFragment)
currentFragment = myFragment
currentFragment?.onPageFinished = {
checkLeftRight()
}
}
}
\ No newline at end of file
package com.base.browserwhite.ui.activity.webstore
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.Drawable
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.browserwhite.R
import com.base.browserwhite.bean.WebCategoryBean
import com.base.browserwhite.bean.WebSiteGroupBean
import com.base.browserwhite.bean.webCategoryBeanList
......@@ -11,18 +14,28 @@ import com.base.browserwhite.bean.webSiteGroupBeanList
import com.base.browserwhite.databinding.ActivityWevStoreBinding
import com.base.browserwhite.databinding.ItemTabWebstoreBinding
import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import com.base.browserwhite.ui.adapter.WebSiteGroupAdapter
import com.base.browserwhite.utils.AssetUtils.readJsonFromAsset
import com.base.browserwhite.utils.BarUtils
import com.base.browserwhite.utils.LogEx
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class WevStoreActivity : BaseActivity<ActivityWevStoreBinding>() {
private val TAG = "WevStoreActivity"
override val binding: ActivityWevStoreBinding by lazy {
ActivityWevStoreBinding.inflate(layoutInflater)
}
private val webCategoryBean: ArrayList<WebCategoryBean> = arrayListOf()
private val webSiteGroupBean: ArrayList<WebSiteGroupBean> = arrayListOf()
private lateinit var adapter: WebSiteGroupAdapter
@SuppressLint("SetTextI18n")
override fun initView() {
......@@ -30,6 +43,19 @@ class WevStoreActivity : BaseActivity<ActivityWevStoreBinding>() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
adapter = WebSiteGroupAdapter(clickAction = { bean ->
startActivity(Intent(this, WebBrowserActivity::class.java).apply {
putExtra("uri", bean.url)
})
finish()
})
binding.rv.adapter = adapter
binding.tabLayout.observeIndexChange { fromIndex, toIndex, reselect, fromUser ->
if (!reselect) {
binding.rv.smoothScrollToPosition(toIndex)
}
}
initData()
}
......@@ -40,12 +66,39 @@ class WevStoreActivity : BaseActivity<ActivityWevStoreBinding>() {
val list = webSiteGroupBeanList(json)
webSiteGroupBean.addAll(list)
val imageSize = this@WevStoreActivity.resources.getDimensionPixelSize(R.dimen.dp_30)
launch(Dispatchers.Main) {
webCategoryBean.forEach { bean ->
// LogEx.logDebug(TAG, bean.iconUrl)
val tabBinding = ItemTabWebstoreBinding.inflate(layoutInflater)
tabBinding.tv.text = bean.name
Glide.with(this@WevStoreActivity).asDrawable().load(bean.iconUrl).into(
object : CustomTarget<Drawable>() {
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
LogEx.logDebug(TAG, "resource=${resource.intrinsicWidth} ${resource.intrinsicHeight}")
/// 这一步必须要做,否则不会显示.
resource.setBounds(0, 0, imageSize, imageSize)
// 设置TextView的左侧图标
tabBinding.tv.setCompoundDrawables(resource, null, null, null)
// 设置图片与文本之间的间距
val padding = 10 // 例如10dp的间距
tabBinding.tv.setCompoundDrawablePadding(padding)
// tabBinding.tv.invalidate()
}
override fun onLoadCleared(placeholder: Drawable?) {
}
}
)
binding.tabLayout.addView(tabBinding.root)
}
adapter.setData(list)
}
}
......
package com.base.browserwhite.ui.adapter
import android.annotation.SuppressLint
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.browserwhite.R
import com.base.browserwhite.bean.WebSiteBean
import com.base.browserwhite.bean.WebSiteGroupBean
import com.base.browserwhite.databinding.ItemWebsiteGroupBinding
import com.base.browserwhite.utils.XmlEx.inflate
class WebSiteGroupAdapter : RecyclerView.Adapter<WebSiteGroupAdapter.GroupViewHolder>() {
class WebSiteGroupAdapter(val clickAction: (bean: WebSiteBean) -> Unit) : RecyclerView.Adapter<WebSiteGroupAdapter.GroupViewHolder>() {
val beanList = arrayListOf<WebSiteGroupBean>()
private val beanList = arrayListOf<WebSiteGroupBean>()
inner class GroupViewHolder(view: View) : ViewHolder(view)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GroupViewHolder {
TODO("Not yet implemented")
return GroupViewHolder(R.layout.item_website_group.inflate(parent))
}
override fun getItemCount(): Int {
......@@ -21,6 +26,19 @@ class WebSiteGroupAdapter : RecyclerView.Adapter<WebSiteGroupAdapter.GroupViewHo
}
override fun onBindViewHolder(holder: GroupViewHolder, position: Int) {
TODO("Not yet implemented")
val binding = ItemWebsiteGroupBinding.bind(holder.itemView)
val bean = beanList[position]
val adapter = WebsiteAdapter(1, click = clickAction)
binding.tvName.text = bean.category_name
binding.rvGroup.adapter = adapter
adapter.setData(bean.items)
}
@SuppressLint("NotifyDataSetChanged")
fun setData(list: List<WebSiteGroupBean>) {
beanList.clear()
beanList.addAll(list)
notifyDataSetChanged()
}
}
\ No newline at end of file
......@@ -7,11 +7,14 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.browserwhite.R
import com.base.browserwhite.bean.WebSiteBean
import com.base.browserwhite.databinding.ItemWebsiteGrid2Binding
import com.base.browserwhite.databinding.ItemWebsiteGridBinding
import com.base.browserwhite.utils.LogEx
import com.base.browserwhite.utils.XmlEx.inflate
import com.bumptech.glide.Glide
class WebsiteAdapter(val click: (bean: WebSiteBean) -> Unit) : RecyclerView.Adapter<WebsiteAdapter.WebSiteViewHolder>() {
class WebsiteAdapter(val uiType: Int = 0, val click: (bean: WebSiteBean) -> Unit) :
RecyclerView.Adapter<WebsiteAdapter.WebSiteViewHolder>() {
private val TAG = "WebsiteAdapter"
......@@ -22,7 +25,12 @@ class WebsiteAdapter(val click: (bean: WebSiteBean) -> Unit) : RecyclerView.Adap
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WebSiteViewHolder {
return WebSiteViewHolder(R.layout.item_website_grid.inflate(parent))
val layout = if (uiType == 0) {
R.layout.item_website_grid
} else {
R.layout.item_website_grid_2
}
return WebSiteViewHolder(layout.inflate(parent))
}
override fun getItemCount(): Int {
......@@ -30,8 +38,11 @@ class WebsiteAdapter(val click: (bean: WebSiteBean) -> Unit) : RecyclerView.Adap
}
override fun onBindViewHolder(holder: WebSiteViewHolder, position: Int) {
val binding = ItemWebsiteGridBinding.bind(holder.itemView)
val bean = beanList[position]
val context = holder.itemView.context
when (uiType) {
0 -> {
val binding = ItemWebsiteGridBinding.bind(holder.itemView)
binding.ivIcon.setImageResource(bean.localIcon)
binding.tvName.text = bean.name
holder.canDrag = !bean.increase
......@@ -40,6 +51,18 @@ class WebsiteAdapter(val click: (bean: WebSiteBean) -> Unit) : RecyclerView.Adap
}
}
else -> {
val binding = ItemWebsiteGrid2Binding.bind(holder.itemView)
Glide.with(context).load(bean.icon_url).into(binding.iv)
binding.tvName.text = bean.name
binding.root.setOnClickListener {
click.invoke(bean)
}
}
}
}
@SuppressLint("NotifyDataSetChanged")
fun setData(webSiteList: List<WebSiteBean>) {
beanList.clear()
......
......@@ -34,7 +34,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
override fun setView() {
binding.rvWeb.layoutManager = GridLayoutManager(requireContext(), 4, LinearLayoutManager.VERTICAL, false)
websiteAdapter = WebsiteAdapter {
websiteAdapter = WebsiteAdapter(0) {
if (it.name == "Increase") {
requireContext().startActivity(Intent(requireContext(), WevStoreActivity::class.java))
} else {
......
......@@ -13,17 +13,25 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import com.base.browserwhite.databinding.FragmentWebViewBinding
class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
class WebViewFragment(val uri: String) : BaseFragment<FragmentWebViewBinding>() {
override val binding: FragmentWebViewBinding by lazy {
FragmentWebViewBinding.inflate(layoutInflater)
}
var onPageFinished: (() -> Unit)? = null
override fun setView() {
initWebSettings()
binding.webView.loadUrl("https://www.bilibili.com/")
binding.webView.loadUrl(uri)
}
override fun setListener() {
super.setListener()
}
@SuppressLint("SetJavaScriptEnabled")
......@@ -73,7 +81,6 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
message: String?,
result: JsResult?
): Boolean = true
}
binding.webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
......@@ -81,6 +88,11 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
view?.loadUrl(url)
return true
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
onPageFinished?.invoke()
}
}
//设置Cookie
......@@ -89,4 +101,26 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
}
fun canGoBack(): Boolean {
return binding.webView.canGoBack()
}
fun canGoForward(): Boolean {
return binding.webView.canGoForward()
}
fun goBack() {
return binding.webView.goBack()
}
fun goForward() {
return binding.webView.goForward()
}
fun javascriptBack() {
binding.webView.evaluateJavascript("window.history.back();", null)
}
}
\ No newline at end of file
......@@ -7,9 +7,161 @@
android:layout_height="match_parent"
tools:context=".ui.activity.webbrowser.WebBrowserActivity">
<fragment
android:name="com.base.browserwhite.ui.fragment.WebViewFragment"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginHorizontal="15dp"
android:layout_marginVertical="15dp"
android:background="@drawable/bg_stroke_070709"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/fl_search_engine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="?android:attr/selectableItemBackground"
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription">
<ImageView
android:id="@+id/iv_search_engine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/h_s_google"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="-2dp"
android:layout_marginBottom="-2dp"
android:src="@mipmap/xuanze"
app:layout_constraintBottom_toBottomOf="@id/fl_search_engine"
app:layout_constraintEnd_toEndOf="@id/fl_search_engine"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<EditText
android:id="@+id/edit_web"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:background="@null"
android:gravity="center_vertical"
android:hint="Search or enter website address"
android:paddingHorizontal="15dp"
android:singleLine="true"
android:textColorHint="#858587"
android:textSize="14sp"
app:layout_constraintEnd_toStartOf="@id/fl_scan"
app:layout_constraintStart_toEndOf="@id/fl_search_engine"
tools:ignore="Autofill,HardcodedText,TextFields" />
<FrameLayout
android:id="@+id/fl_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="?android:attr/selectableItemBackground"
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/saoyisao" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="0dp"
android:layout_marginVertical="15dp"
app:layout_constraintBottom_toTopOf="@id/cl_bottom"
app:layout_constraintTop_toBottomOf="@id/cl_top"
tools:ignore="UselessLeaf" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_bottom"
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:id="@+id/iv_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/left_n"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_right"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/right_n"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_home"
app:layout_constraintStart_toEndOf="@id/iv_left"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/home"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_label"
app:layout_constraintStart_toEndOf="@id/iv_right"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/biaoqian"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_more"
app:layout_constraintStart_toEndOf="@id/iv_home"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/gengduo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_label"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -14,10 +14,11 @@
tools:ignore="UselessParent">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:layout_marginVertical="20dp"
android:layout_marginVertical="15dp"
android:layout_marginStart="15dp"
android:text="Web Store"
android:textColor="@color/black"
......@@ -37,16 +38,25 @@
</FrameLayout>
<com.angcyo.tablayout.DslTabLayout
android:layout_marginHorizontal="16dp"
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="10dp"
app:tab_deselect_color="@color/black"
app:tab_divider_solid_color="@android:color/transparent"
app:tab_divider_width="16dp"
app:tab_draw_divider="true"
app:tab_enable_ico_color="false"
app:tab_indicator_style="STYLE_NONE"
app:tab_select_color="@color/white" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_website_group" />
</LinearLayout>
\ No newline at end of file
......@@ -3,11 +3,12 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="40dp"
android:layout_gravity="center_vertical"
android:background="@drawable/bg_tab_selector_webstore"
android:gravity="center"
android:paddingHorizontal="18dp"
android:paddingVertical="10dp"
android:paddingVertical="5dp"
android:textSize="17sp"
android:textStyle="bold"
tools:text="Socialize" />
<?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="45dp"
......@@ -8,15 +9,25 @@
android:background="@drawable/bg_f3f4f6_10"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<androidx.cardview.widget.CardView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="10dp"
app:cardCornerRadius="5dp"
app:cardElevation="0dp">
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
......
......@@ -37,6 +37,7 @@
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="10dp"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2"
tools:listitem="@layout/item_website_grid_2" />
......
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