Commit 6ec9cc50 authored by shiyl's avatar shiyl

新建发布优惠券WebView

parent 425191e0
...@@ -9,6 +9,7 @@ class XRouterPathConstants { ...@@ -9,6 +9,7 @@ class XRouterPathConstants {
const val NEWS_MAIN = "/MainActivity" const val NEWS_MAIN = "/MainActivity"
const val NEWS_CONTENT = "/news" const val NEWS_CONTENT = "/news"
// 用户协议 & 隐私政策
const val PROTOCOL = "/protocol" const val PROTOCOL = "/protocol"
const val SUPPORT = "/productSupport" const val SUPPORT = "/productSupport"
...@@ -79,6 +80,9 @@ class XRouterPathConstants { ...@@ -79,6 +80,9 @@ class XRouterPathConstants {
// 钱包 —— 常见问题 // 钱包 —— 常见问题
const val COMMON_PROBLEM = "/wallet/CommonProblemActivity" const val COMMON_PROBLEM = "/wallet/CommonProblemActivity"
// 商品 —— 发布优惠券
const val publishCouponsActivity = "/commodity/PublishCouponsActivity"
// 商品 —— 优惠券选择类目 // 商品 —— 优惠券选择类目
const val chooseCategoryActivity = "/commodity/ChooseCategoryActivity" const val chooseCategoryActivity = "/commodity/ChooseCategoryActivity"
} }
......
...@@ -12,33 +12,34 @@ import com.yidian.commoncomponent.BaseFragment ...@@ -12,33 +12,34 @@ import com.yidian.commoncomponent.BaseFragment
* 所有Fragment的基类 * 所有Fragment的基类
*/ */
abstract class BaseFragment<VB : ViewBinding> : BaseFragment() { abstract class BaseFragment<VB : ViewBinding> : BaseFragment() {
private var _binding: VB?=null
protected val viewBinding get() = _binding!! private var _binding: VB? = null
protected val viewBinding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, override fun onCreateView(
container: ViewGroup?, inflater: LayoutInflater,
savedInstanceState: Bundle? container: ViewGroup?,
): View? { savedInstanceState: Bundle?
): View? {
_binding = createViewBinding(inflater,container) _binding = createViewBinding(inflater, container)
return _binding!!.root return _binding?.root
} }
abstract fun createViewBinding(inflater: LayoutInflater, container: ViewGroup?): VB abstract fun createViewBinding(inflater: LayoutInflater, container: ViewGroup?): VB
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
init(savedInstanceState) init(savedInstanceState)
} }
protected open fun init(savedInstanceState: Bundle?) {} protected open fun init(savedInstanceState: Bundle?) {}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null
} }
fun showToast(msg:String){
Toast.makeText(requireContext(),msg,Toast.LENGTH_SHORT).show() fun showToast(msg: String) {
} Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show()
}
} }
package com.yidian.shenghuoquan.newscontent.ui.webview package com.yidian.common.webview
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
...@@ -7,4 +7,4 @@ import com.yidian.xarc.xbrid.XWebView ...@@ -7,4 +7,4 @@ import com.yidian.xarc.xbrid.XWebView
class YiDianWebView: XWebView { class YiDianWebView: XWebView {
constructor(context: Context): super(context) constructor(context: Context): super(context)
constructor(context: Context, attributes: AttributeSet?): super(context, attributes) constructor(context: Context, attributes: AttributeSet?): super(context, attributes)
} }
\ No newline at end of file
package com.yidian.common.widget.blank
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import com.yidian.common.R
import com.yidian.nightmode.widget.YdLinearLayout
import com.yidian.nightmode.widget.YdTextView
import com.yidian.common.utils.YdUiUtils
/**
* 缺省页面
*/
class BlankPageView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
FrameLayout(context, attrs, defStyle) {
companion object {
const val Error = "error"
const val Blank = "blank"
}
private lateinit var llyError: YdLinearLayout
private lateinit var llyBlank: YdLinearLayout
private lateinit var tvLoadAgain: YdTextView
private lateinit var loadAgainCallback: IBlankViewLoadAgainCallback
init {
inflate(context, R.layout.blank_page_view, this)
}
fun initBlankPageView(loadAgainCallback: IBlankViewLoadAgainCallback, position: Int) {
this.loadAgainCallback = loadAgainCallback
val lp = LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
lp.topMargin = YdUiUtils.dip2px(position, context)
lp.gravity = Gravity.CENTER_HORIZONTAL
llyError.layoutParams = lp
llyBlank.layoutParams = lp
}
override fun onFinishInflate() {
super.onFinishInflate()
llyError = findViewById(R.id.lly_error)
llyBlank = findViewById(R.id.lly_blank)
tvLoadAgain = findViewById(R.id.tv_loadAgain)
setClickListener()
}
private fun setClickListener() {
tvLoadAgain.setOnClickListener {
loadAgainCallback.loadAgainCallback()
}
}
fun setBlankStatus(status: String) {
when (status) {
Error -> {
llyError.visibility = View.VISIBLE
llyBlank.visibility = View.GONE
}
Blank -> {
llyError.visibility = View.GONE
llyBlank.visibility = View.VISIBLE
}
}
}
}
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<com.yidian.nightmode.widget.YdImageView <com.yidian.nightmode.widget.YdImageView
android:layout_width="150dp" android:layout_width="150dp"
android:layout_height="150dp" android:layout_height="150dp"
android:background="@mipmap/icon_404_wifi"/> android:background="@drawable/icon_404_wifi"/>
<com.yidian.nightmode.widget.YdTextView <com.yidian.nightmode.widget.YdTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<com.yidian.nightmode.widget.YdImageView <com.yidian.nightmode.widget.YdImageView
android:layout_width="150dp" android:layout_width="150dp"
android:layout_height="150dp" android:layout_height="150dp"
android:background="@mipmap/icon_blank_page"/> android:background="@drawable/icon_blank_page"/>
<com.yidian.nightmode.widget.YdTextView <com.yidian.nightmode.widget.YdTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -2,6 +2,7 @@ package com.yidian.shenghuoquan.commodity.app ...@@ -2,6 +2,7 @@ package com.yidian.shenghuoquan.commodity.app
import com.yidian.common.XRouterPathConstants import com.yidian.common.XRouterPathConstants
import com.yidian.shenghuoquan.commodity.ui.coupon.ChooseCategoryActivity import com.yidian.shenghuoquan.commodity.ui.coupon.ChooseCategoryActivity
import com.yidian.shenghuoquan.commodity.ui.coupon.PublishCouponsActivity
/** /**
...@@ -10,7 +11,8 @@ import com.yidian.shenghuoquan.commodity.ui.coupon.ChooseCategoryActivity ...@@ -10,7 +11,8 @@ import com.yidian.shenghuoquan.commodity.ui.coupon.ChooseCategoryActivity
object ClassMapUtil { object ClassMapUtil {
val xPageNodeMap = mapOf( val xPageNodeMap = mapOf(
XRouterPathConstants.Companion.chooseCategoryActivity to ChooseCategoryActivity::class.java XRouterPathConstants.Companion.publishCouponsActivity to PublishCouponsActivity::class.java,// 发布优惠券
XRouterPathConstants.Companion.chooseCategoryActivity to ChooseCategoryActivity::class.java,// 优惠券选择类目
) )
} }
package com.yidian.shenghuoquan.commodity.ui.coupon
import android.webkit.WebChromeClient
import android.webkit.WebView
import androidx.activity.viewModels
import com.google.gson.Gson
import com.yidian.common.XRouterPathConstants
import com.yidian.common.extensions.initTitleBar
import com.yidian.common.http.HttpResult
import com.yidian.common.mvvm.BaseMvvmActivity
import com.yidian.shenghuoquan.commodity.R
import com.yidian.shenghuoquan.commodity.databinding.CommodityActivityPublishCouponsBinding
import com.yidian.xarc.xbrid.XBridManager
import com.yidian.xarc.xbrid.XWebView
import com.yidian.xpage.XPageViewProtocol
import org.json.JSONObject
/**
* 发布优惠券
*/
class PublishCouponsActivity : BaseMvvmActivity<CommodityActivityPublishCouponsBinding, PublishCouponsViewModel>(), XPageViewProtocol {
private lateinit var webView: XWebView
private var loadDataFinish = false
private var loadWebViewFinish = false
private var data: HttpResult<Any?>? = null
override val layoutId: Int = R.layout.commodity_activity_publish_coupons
override val vm: PublishCouponsViewModel by viewModels()
override fun getXPageName(): String {
return XRouterPathConstants.publishCouponsActivity
}
override fun initView() {
initTitleBar(binding.include.toolbar, binding.include.tvTitle, "发布优惠券")
val serializableExtra = intent.getSerializableExtra(XRouterPathConstants.ParamsKey)
serializableExtra?.let {
val paramsMap = serializableExtra as HashMap<*, *>
val couponId = paramsMap[CouponId] as String
initWebView()
}
}
private fun initWebView() {
webView = XBridManager.getWebView(this, "testidenfier", binding.couponWebView)
webView.loadUrl("xbrid_article")
webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
if (newProgress == 100) {
loadWebViewFinish = true
postDataToWeb()
}
}
}
WebView.setWebContentsDebuggingEnabled(true)
}
private fun postDataToWeb() {
// if (loadDataFinish && loadWebViewFinish) {
// val contentDetailBean = ContentDetailBean("getArticleData", data)
// val params = Gson().toJson(contentDetailBean)
// XBridManager.postEvent("ArticleService", JSONObject(params), webView)
// }
}
override fun onDestroy() {
super.onDestroy()
if (::webView.isInitialized) {
XBridManager.backWebView(webView)
}
}
companion object {
const val CouponId = "coupon_id"
}
}
package com.yidian.shenghuoquan.commodity.ui.coupon
import com.yidian.common.mvvm.BaseViewModel
class PublishCouponsViewModel : BaseViewModel() {
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="vm"
type="com.yidian.shenghuoquan.commodity.ui.coupon.PublishCouponsViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/include"
layout="@layout/layout_common_toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.yidian.common.webview.YiDianWebView
android:id="@+id/coupon_web_view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/include" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.widget
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import com.yidian.nightmode.widget.YdLinearLayout
import com.yidian.nightmode.widget.YdTextView
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.bean.IBlankViewLoadAgainCallback
import com.yidian.common.utils.YdUiUtils
class BlankPageView@JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0): FrameLayout(context, attrs,defStyle) {
companion object{
const val Error = "error"
const val Blank = "blank"
}
private lateinit var llyError: YdLinearLayout
private lateinit var llyBlank: YdLinearLayout
private lateinit var tvLoadAgain: YdTextView
private lateinit var loadAgainCallback: IBlankViewLoadAgainCallback
init {
inflate(context, R.layout.blank_page_view,this)
}
fun initBlankPageView(loadAgainCallback: IBlankViewLoadAgainCallback, position: Int){
this.loadAgainCallback = loadAgainCallback
val lp = LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
lp.topMargin = YdUiUtils.dip2px(position, context)
lp.gravity = Gravity.CENTER_HORIZONTAL
llyError.layoutParams = lp
llyBlank.layoutParams = lp
}
override fun onFinishInflate() {
super.onFinishInflate()
llyError = findViewById(R.id.lly_error)
llyBlank = findViewById(R.id.lly_blank)
tvLoadAgain = findViewById(R.id.tv_loadAgain)
setClickListener()
}
private fun setClickListener(){
tvLoadAgain.setOnClickListener {
loadAgainCallback.loadAgainCallback()
}
}
fun setBlankStatus(status: String){
when(status){
Error -> {
llyError.visibility = View.VISIBLE
llyBlank.visibility = View.GONE
}
Blank -> {
llyError.visibility = View.GONE
llyBlank.visibility = View.VISIBLE
}
}
}
}
\ No newline at end of file
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<string name="privacy_policy_title">隐私政策概述</string> <string name="privacy_policy_title">隐私政策概述</string>
<string name="privacy_policy_one">1.我们将会收集设备信息(提供问题诊断服务)、存储(图片下载上传)等权限,您有权拒绝或撤回授权;</string> <string name="privacy_policy_one">1.我们将会收集设备信息(提供问题诊断服务)、存储(图片下载上传)等权限,您有权拒绝或撤回授权;</string>
<string name="privacy_policy_two_first">2.在使用本产品之前,请认真阅读</string> <string name="privacy_policy_two_first">2.在使用本产品之前,请认真阅读</string>
<string name="privacy_policy_statement">&#160;隐私声明&#160;</string> <string name="privacy_policy_statement">&#160;隐私政策&#160;</string>
<string name="and"></string> <string name="and"></string>
<string name="user_protocol">&#160;用户协议&#160;</string> <string name="user_protocol">&#160;用户协议&#160;</string>
<string name="privacy_policy_two_second">,您需要同意并授权全部条款后再开始我们的服务。</string> <string name="privacy_policy_two_second">,您需要同意并授权全部条款后再开始我们的服务。</string>
......
...@@ -97,7 +97,9 @@ ext.dependencies = [ ...@@ -97,7 +97,9 @@ ext.dependencies = [
'com.loopj.android:android-async-http:1.4.9', 'com.loopj.android:android-async-http:1.4.9',
// 屏幕适配 // 屏幕适配
'me.jessyan:autosize:1.2.1' 'me.jessyan:autosize:1.2.1',
//https://github.com/CymChad/BaseRecyclerViewAdapterHelper
'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
], ],
other : [ other : [
':CommonLib:Common' ':CommonLib:Common'
......
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