Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ShenghuoquanBusiness
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bp
ShenghuoquanBusiness
Commits
6ec9cc50
Commit
6ec9cc50
authored
Jul 06, 2021
by
shiyl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新建发布优惠券WebView
parent
425191e0
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
235 additions
and
102 deletions
+235
-102
XRouterPathConstants.kt
...n/src/main/java/com/yidian/common/XRouterPathConstants.kt
+4
-0
BaseFragment.kt
...mmon/src/main/java/com/yidian/common/base/BaseFragment.kt
+30
-29
YiDianWebView.kt
.../src/main/java/com/yidian/common/webview/YiDianWebView.kt
+2
-2
BlankPageView.kt
...main/java/com/yidian/common/widget/blank/BlankPageView.kt
+69
-0
IBlankViewLoadAgainCallback.kt
...yidian/common/widget/blank/IBlankViewLoadAgainCallback.kt
+0
-0
icon_404_wifi.png
...Lib/Common/src/main/res/drawable-xxhdpi/icon_404_wifi.png
+0
-0
icon_blank_page.png
...b/Common/src/main/res/drawable-xxhdpi/icon_blank_page.png
+0
-0
blank_page_view.xml
CommonLib/Common/src/main/res/layout/blank_page_view.xml
+2
-2
ClassMapUtil.kt
...ava/com/yidian/shenghuoquan/commodity/app/ClassMapUtil.kt
+3
-1
PublishCouponsActivity.kt
...henghuoquan/commodity/ui/coupon/PublishCouponsActivity.kt
+80
-0
PublishCouponsViewModel.kt
...enghuoquan/commodity/ui/coupon/PublishCouponsViewModel.kt
+8
-0
commodity_activity_publish_coupons.xml
...rc/main/res/layout/commodity_activity_publish_coupons.xml
+33
-0
BlankPageView.kt
...m/yidian/shenghuoquan/newscontent/widget/BlankPageView.kt
+0
-66
strings.xml
Components/newscontent/src/main/res/values/strings.xml
+1
-1
config.gradle
config/config.gradle
+3
-1
No files found.
CommonLib/Common/src/main/java/com/yidian/common/XRouterPathConstants.kt
View file @
6ec9cc50
...
@@ -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"
}
}
...
...
CommonLib/Common/src/main/java/com/yidian/common/base/BaseFragment.kt
View file @
6ec9cc50
...
@@ -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
()
}
}
}
Com
ponents/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/ui
/webview/YiDianWebView.kt
→
Com
monLib/Common/src/main/java/com/yidian/common
/webview/YiDianWebView.kt
View file @
6ec9cc50
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
CommonLib/Common/src/main/java/com/yidian/common/widget/blank/BlankPageView.kt
0 → 100644
View file @
6ec9cc50
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
}
}
}
}
Com
ponents/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/bean
/IBlankViewLoadAgainCallback.kt
→
Com
monLib/Common/src/main/java/com/yidian/common/widget/blank
/IBlankViewLoadAgainCallback.kt
View file @
6ec9cc50
File moved
Com
ponents/newscontent/src/main/res/mipmap
-xxhdpi/icon_404_wifi.png
→
Com
monLib/Common/src/main/res/drawable
-xxhdpi/icon_404_wifi.png
View file @
6ec9cc50
File moved
Com
ponents/newscontent/src/main/res/mipmap
-xxhdpi/icon_blank_page.png
→
Com
monLib/Common/src/main/res/drawable
-xxhdpi/icon_blank_page.png
View file @
6ec9cc50
File moved
Com
ponents/newscontent
/src/main/res/layout/blank_page_view.xml
→
Com
monLib/Common
/src/main/res/layout/blank_page_view.xml
View file @
6ec9cc50
...
@@ -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"
...
...
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/app/ClassMapUtil.kt
View file @
6ec9cc50
...
@@ -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
,
// 优惠券选择类目
)
)
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/PublishCouponsActivity.kt
0 → 100644
View file @
6ec9cc50
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"
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/PublishCouponsViewModel.kt
0 → 100644
View file @
6ec9cc50
package
com.yidian.shenghuoquan.commodity.ui.coupon
import
com.yidian.common.mvvm.BaseViewModel
class
PublishCouponsViewModel
:
BaseViewModel
()
{
}
Components/commodity/src/main/res/layout/commodity_activity_publish_coupons.xml
0 → 100644
View file @
6ec9cc50
<?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
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/widget/BlankPageView.kt
deleted
100644 → 0
View file @
425191e0
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
Components/newscontent/src/main/res/values/strings.xml
View file @
6ec9cc50
...
@@ -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"
>
 
隐私
声明
 
</string>
<string
name=
"privacy_policy_statement"
>
 
隐私
政策
 
</string>
<string
name=
"and"
>
和
</string>
<string
name=
"and"
>
和
</string>
<string
name=
"user_protocol"
>
 
用户协议
 
</string>
<string
name=
"user_protocol"
>
 
用户协议
 
</string>
<string
name=
"privacy_policy_two_second"
>
,您需要同意并授权全部条款后再开始我们的服务。
</string>
<string
name=
"privacy_policy_two_second"
>
,您需要同意并授权全部条款后再开始我们的服务。
</string>
...
...
config/config.gradle
View file @
6ec9cc50
...
@@ -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'
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment