Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
YDL-Component-Medical
Overview
Overview
Details
Activity
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
杨凯
YDL-Component-Medical
Commits
d2a42bcb
Commit
d2a42bcb
authored
Jul 21, 2022
by
fengquan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 预约支付弹框
parent
b63f63c0
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
384 additions
and
5 deletions
+384
-5
build.gradle
m-consultant/build.gradle
+1
-0
ExpertSearchActivity.kt
m-consultant/src/main/java/com/yidianling/consultant/ExpertSearchActivity.kt
+3
-0
ExpertSearchFragment.kt
m-consultant/src/main/java/com/yidianling/consultant/ExpertSearchFragment.kt
+37
-1
ExpertSearchPresenter.kt
m-consultant/src/main/java/com/yidianling/consultant/ExpertSearchPresenter.kt
+18
-0
IExpertSearchView.kt
m-consultant/src/main/java/com/yidianling/consultant/IExpertSearchView.kt
+4
-4
ConsultSubPayDialog.kt
m-consultant/src/main/java/com/yidianling/consultant/dialog/ConsultSubPayDialog.kt
+104
-0
SearchApi.kt
m-consultant/src/main/java/com/yidianling/consultant/model/SearchApi.kt
+8
-0
PromptPaymentBean.kt
m-consultant/src/main/java/com/yidianling/consultant/model/bean/PromptPaymentBean.kt
+17
-0
consultant_bg_radius_red_20.xml
m-consultant/src/main/res/drawable/consultant_bg_radius_red_20.xml
+8
-0
consultant_bg_sub_pay.xml
m-consultant/src/main/res/drawable/consultant_bg_sub_pay.xml
+8
-0
consultant_bg_sub_pay_dialog.xml
m-consultant/src/main/res/drawable/consultant_bg_sub_pay_dialog.xml
+8
-0
consultant_expert_consult_sub_pay_dialog.xml
m-consultant/src/main/res/layout/consultant_expert_consult_sub_pay_dialog.xml
+158
-0
styles.xml
m-consultant/src/main/res/values/styles.xml
+10
-0
No files found.
m-consultant/build.gradle
View file @
d2a42bcb
...
...
@@ -43,6 +43,7 @@ dependencies {
testImplementation
'junit:junit:4.12'
androidTestImplementation
'androidx.test.ext:junit:1.1.1'
androidTestImplementation
'androidx.test.espresso:espresso-core:3.1.0'
implementation
'in.xiandan:count-down-timer:1.0.3'
kapt
'com.alibaba:arouter-compiler:1.2.2'
implementation
rootProject
.
ext
.
dependencies
[
"BaseRecyclerViewAdapterHelper"
]
api
rootProject
.
ext
.
dependencies
[
"ydl-user-router"
]
...
...
m-consultant/src/main/java/com/yidianling/consultant/ExpertSearchActivity.kt
View file @
d2a42bcb
...
...
@@ -82,6 +82,9 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
YDLImageCacheManager
.
showImage
(
this
,
url
,
imgView
,
ops
)
}
override
fun
showPromptPayment
(
promptPaymentBean
:
PromptPaymentBean
)
{
}
override
fun
showImage
(
url
:
String
?,
imgView
:
ImageView
,
...
...
m-consultant/src/main/java/com/yidianling/consultant/ExpertSearchFragment.kt
View file @
d2a42bcb
...
...
@@ -31,9 +31,11 @@ import com.ydl.ydlcommon.base.BaseMvpFragment
import
com.ydl.ydlcommon.base.config.ChannelConfig
import
com.ydl.ydlcommon.base.config.HttpConfig
import
com.ydl.ydlcommon.data.PlatformDataManager
import
com.ydl.ydlcommon.modular.findRouteService
import
com.ydl.ydlcommon.ui.LogoLoadingView
import
com.ydl.ydlcommon.utils.BuryPointUtils
import
com.ydl.ydlcommon.utils.DisplayUtils
import
com.ydl.ydlcommon.utils.SharedPreferencesEditor
import
com.ydl.ydlcommon.utils.StatusBarUtils
import
com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import
com.ydl.ydlcommon.utils.remind.ToastHelper
...
...
@@ -42,8 +44,8 @@ import com.yidianling.common.tools.LogUtil
import
com.yidianling.common.tools.RxImageTool
import
com.yidianling.common.tools.ToastUtil
import
com.yidianling.consultant.adapter.ExpertSearchAdapter
import
com.yidianling.consultant.bean.FunctionWordConsultBean
import
com.yidianling.consultant.constants.ConsultBIConstants
import
com.yidianling.consultant.dialog.ConsultSubPayDialog
import
com.yidianling.consultant.listener.OnCategoriesSelectedListener
import
com.yidianling.consultant.listener.OnExpertClickListener
import
com.yidianling.consultant.listener.OnFilterConfirmListener
...
...
@@ -57,6 +59,7 @@ import com.yidianling.consultant.ui.view.FilterPopupWindow
import
com.yidianling.consultant.ui.view.SortPopupWindow
import
com.yidianling.consultant.ui.view.topView.RecommendListView
import
com.yidianling.home.api.event.HomeModuleTabEvent
import
com.yidianling.user.api.service.IUserService
import
de.greenrobot.event.EventBus
import
io.reactivex.Observable
import
io.reactivex.android.schedulers.AndroidSchedulers
...
...
@@ -69,6 +72,7 @@ import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.*
import
org.json.JSONObject
import
java.util.concurrent.Executors
import
java.util.concurrent.TimeUnit
import
kotlin.collections.ArrayList
@Route
(
path
=
"/consultant/consultant"
)
class
ExpertSearchFragment
:
BaseMvpFragment
<
IExpertSearchView
,
ExpertSearchPresenter
>(),
...
...
@@ -125,6 +129,22 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
}
}
var
consultSubPayDialog
:
ConsultSubPayDialog
?
=
null
override
fun
showPromptPayment
(
promptPaymentBean
:
PromptPaymentBean
)
{
if
(
promptPaymentBean
.
toPayTime
!=
0L
)
{
//有订单
consultSubPayDialog
=
activity
?.
let
{
ConsultSubPayDialog
(
it
,
promptPaymentBean
)
}
consultSubPayDialog
?.
show
()
consultSubPayDialog
?.
setOnDismissListener
{
var
timeInterval
=
promptPaymentBean
.
orderToPayTime
!!
*
1000
// val endTime = System.currentTimeMillis() + 1000 * 60
SharedPreferencesEditor
.
putString
(
"orderToPayTime"
,
timeInterval
.
toString
())
consultSubPayDialog
=
null
}
}
}
override
fun
showImage
(
url
:
String
?,
imgView
:
ImageView
,
...
...
@@ -1467,6 +1487,22 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
//
needRefresh
=
true
}
val
orderToPayTime
=
SharedPreferencesEditor
.
getString
(
"orderToPayTime"
)
var
timeLimit
=
if
(
TextUtils
.
isEmpty
(
orderToPayTime
))
{
0L
}
else
{
orderToPayTime
.
toLong
()
}
if
(!(
consultSubPayDialog
!=
null
&&
consultSubPayDialog
!!
.
isShowing
))
{
if
(
findRouteService
(
IUserService
::
class
.
java
).
isLogin
()
&&
System
.
currentTimeMillis
()
>
timeLimit
)
{
getPresenter
().
fetchPromptPayment
()
}
}
ActionCountUtils
.
count
(
ConsultBIConstants
.
ConsultEvent
.
APP_CONSULT_LIST_PAGE_VISIT
)
ActionCountUtils
.
count
(
"daoyi_advertisement_page|daoyi_advertisement_visit"
,
"6"
)
}
...
...
m-consultant/src/main/java/com/yidianling/consultant/ExpertSearchPresenter.kt
View file @
d2a42bcb
...
...
@@ -276,4 +276,21 @@ class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() {
}
})
}
@SuppressLint
(
"CheckResult"
)
fun
fetchPromptPayment
()
{
SearchApi
.
getSearchApi
()
.
promptPayment
()
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mView
))
//使用 Rxlifecycle,使 Disposable 和 Activity 一起销毁
.
compose
(
RxUtils
.
resultJavaData
())
.
subscribeOn
(
Schedulers
.
io
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
({
resp
->
mView
.
showPromptPayment
(
resp
)
},
{
t
->
HttpErrorUtils
.
handleError
(
BaseApp
.
getApp
(),
t
)
mView
.
fetchFailed
(
t
.
message
)
})
}
}
\ No newline at end of file
m-consultant/src/main/java/com/yidianling/consultant/IExpertSearchView.kt
View file @
d2a42bcb
...
...
@@ -4,10 +4,7 @@ import android.widget.ImageView
import
com.ydl.ydl_image.config.SimpleImageOpConfiger
import
com.ydl.ydlcommon.mvp.base.IView
import
com.yidianling.consultant.bean.FunctionWordConsultBean
import
com.yidianling.consultant.model.bean.ExpertServiceItem
import
com.yidianling.consultant.model.bean.Extras
import
com.yidianling.consultant.model.bean.FunctionWordBean
import
com.yidianling.consultant.model.bean.HeadData
import
com.yidianling.consultant.model.bean.*
/**
* Created by zqk on 17-9-19.
...
...
@@ -38,4 +35,6 @@ interface IExpertSearchView : IView {
*/
fun
showImage
(
url
:
String
?,
imgView
:
ImageView
,
ops
:
SimpleImageOpConfiger
)
fun
showPromptPayment
(
promptPaymentBean
:
PromptPaymentBean
)
}
\ No newline at end of file
m-consultant/src/main/java/com/yidianling/consultant/dialog/ConsultSubPayDialog.kt
0 → 100644
View file @
d2a42bcb
package
com.yidianling.consultant.dialog
import
`in`.xiandan.countdowntimer.CountDownTimerSupport
import
`in`.xiandan.countdowntimer.OnCountDownTimerListener
import
android.app.Dialog
import
android.content.Context
import
android.os.Bundle
import
android.text.TextUtils
import
android.view.Gravity
import
android.view.View
import
android.view.WindowManager
import
android.widget.ImageView
import
android.widget.TextView
import
com.bumptech.glide.Glide
import
com.ydl.webview.H5Params
import
com.ydl.webview.NewH5Activity
import
com.yidianling.common.tools.ToastUtil
import
com.yidianling.consultant.R
import
com.yidianling.consultant.model.bean.PromptPaymentBean
import
java.text.DecimalFormat
import
java.text.SimpleDateFormat
import
java.util.*
/**
* 咨询助理浮层
* Created by xj on 2019/10/30.
*/
class
ConsultSubPayDialog
(
private
val
mContext
:
Context
,
private
val
promptPaymentBean
:
PromptPaymentBean
)
:
Dialog
(
mContext
,
R
.
style
.
dialog_default_style
)
{
var
mTimer
:
CountDownTimerSupport
?
=
null
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
setContentView
(
R
.
layout
.
consultant_expert_consult_sub_pay_dialog
)
val
params
=
window
.
attributes
params
.
width
=
WindowManager
.
LayoutParams
.
WRAP_CONTENT
params
.
height
=
WindowManager
.
LayoutParams
.
WRAP_CONTENT
params
.
gravity
=
Gravity
.
CENTER
window
.
attributes
=
params
setCanceledOnTouchOutside
(
false
)
initView
();
}
private
fun
initView
()
{
var
titleTv
=
findViewById
<
TextView
>(
R
.
id
.
tv_title
)
var
timeTv
=
findViewById
<
TextView
>(
R
.
id
.
tv_time
)
titleTv
.
paint
.
isFakeBoldText
=
true
Glide
.
with
(
mContext
)
.
load
(
promptPaymentBean
.
smallImage
).
into
(
findViewById
<
ImageView
>(
R
.
id
.
avaterIv
))
findViewById
<
TextView
>(
R
.
id
.
nameTv
).
text
=
promptPaymentBean
.
name
findViewById
<
TextView
>(
R
.
id
.
desTv
).
text
=
promptPaymentBean
.
productName
val
decimalFormat
=
DecimalFormat
(
"###.##"
)
val
price
=
decimalFormat
.
format
(
promptPaymentBean
.
price
)
findViewById
<
TextView
>(
R
.
id
.
priceTv
).
text
=
"¥$price"
var
format
=
SimpleDateFormat
(
"HH:mm:ss"
);
format
.
timeZone
=
TimeZone
.
getTimeZone
(
"GMT+0"
);
var
millisInFuture
=
promptPaymentBean
.
toPayTime
!!
-
promptPaymentBean
.
currentTime
!!
mTimer
=
CountDownTimerSupport
(
millisInFuture
,
1000
)
mTimer
?.
setOnCountDownTimerListener
(
object
:
OnCountDownTimerListener
{
override
fun
onTick
(
millisUntilFinished
:
Long
)
{
val
time
=
format
.
format
(
millisUntilFinished
)
timeTv
.
text
=
time
}
override
fun
onFinish
()
{
dismiss
()
}
override
fun
onCancel
()
{
// 倒计时手动停止
}
})
mTimer
?.
start
()
findViewById
<
TextView
>(
R
.
id
.
tv_close
).
setOnClickListener
{
mTimer
?.
stop
()
dismiss
()
}
findViewById
<
View
>(
R
.
id
.
pay
).
setOnClickListener
{
if
(!
TextUtils
.
isEmpty
(
promptPaymentBean
.
orderDetailUrl
))
{
val
h5Params
=
H5Params
(
promptPaymentBean
.
orderDetailUrl
!!
,
null
)
NewH5Activity
.
start
(
context
,
h5Params
)
dismiss
()
}
else
{
ToastUtil
.
toastShort
(
"跳转失败"
)
}
}
}
override
fun
onDetachedFromWindow
()
{
super
.
onDetachedFromWindow
()
if
(
mTimer
!=
null
)
{
mTimer
?.
stop
()
mTimer
=
null
}
}
}
\ No newline at end of file
m-consultant/src/main/java/com/yidianling/consultant/model/SearchApi.kt
View file @
d2a42bcb
...
...
@@ -10,6 +10,7 @@ import com.yidianling.consultant.bean.*
import
com.yidianling.consultant.model.bean.ExpertBean
import
com.yidianling.consultant.model.bean.FunctionWordBean
import
com.yidianling.consultant.model.bean.HeadData
import
com.yidianling.consultant.model.bean.PromptPaymentBean
import
io.reactivex.Observable
import
retrofit2.http.*
...
...
@@ -112,4 +113,10 @@ interface SearchApi {
):
Observable
<
BaseAPIResponse
<
Long
>>
//搜索条件
@GET
(
"consult/user/order/promptPayment"
)
@Headers
(
YDL_DOMAIN
+
YDL_DOMAIN_JAVA
)
fun
promptPayment
():
Observable
<
BaseAPIResponse
<
PromptPaymentBean
>>
}
\ No newline at end of file
m-consultant/src/main/java/com/yidianling/consultant/model/bean/PromptPaymentBean.kt
0 → 100644
View file @
d2a42bcb
package
com.yidianling.consultant.model.bean
data class
PromptPaymentBean
(
var
uid
:
String
?
=
""
,
var
orderId
:
String
?
=
""
,
var
toPayTime
:
Long
?
=
0
,
var
smallImage
:
String
?
=
""
,
var
name
:
String
?
=
""
,
var
price
:
Float
?
=
0.00f
,
var
productName
:
String
?
=
""
,
var
doctorId
:
String
?
=
""
,
var
productId
:
String
?
=
""
,
var
createTime
:
String
?
=
""
,
var
orderToPayTime
:
Long
?
=
0
,
var
orderDetailUrl
:
String
?
=
""
,
var
currentTime
:
Long
?
=
0
)
m-consultant/src/main/res/drawable/consultant_bg_radius_red_20.xml
0 → 100644
View file @
d2a42bcb
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"@dimen/platform_dp_20"
/>
<solid
android:color=
"#FF6B5D"
/>
</shape>
\ No newline at end of file
m-consultant/src/main/res/drawable/consultant_bg_sub_pay.xml
0 → 100644
View file @
d2a42bcb
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"4dp"
/>
<solid
android:color=
"#F6F6F7"
/>
</shape>
\ No newline at end of file
m-consultant/src/main/res/drawable/consultant_bg_sub_pay_dialog.xml
0 → 100644
View file @
d2a42bcb
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"@dimen/platform_dp_12"
/>
<solid
android:color=
"@color/white"
/>
</shape>
\ No newline at end of file
m-consultant/src/main/res/layout/consultant_expert_consult_sub_pay_dialog.xml
0 → 100644
View file @
d2a42bcb
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"307dp"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
>
<TextView
android:id=
"@+id/tv_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerHorizontal=
"true"
android:layout_marginTop=
"@dimen/platform_dp_16"
android:text=
"你还有订单等待付款"
android:textColor=
"#1C1F28"
android:textSize=
"18sp"
/>
<LinearLayout
android:id=
"@+id/ll_time"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_4"
android:layout_below=
"@+id/tv_title"
android:layout_centerHorizontal=
"true"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"还剩"
android:textColor=
"#1C1F28"
android:textSize=
"@dimen/platform_sp_14"
/>
<TextView
android:id=
"@+id/tv_time"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"00:12:21"
android:layout_marginLeft=
"@dimen/platform_dp_2"
android:layout_marginRight=
"@dimen/platform_dp_2"
android:textColor=
"#FF9534"
android:textSize=
"@dimen/platform_sp_14"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"订单将关闭"
android:textColor=
"#1C1F28"
android:textSize=
"@dimen/platform_sp_14"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/ll_content"
android:layout_below=
"@+id/ll_time"
android:layout_width=
"match_parent"
android:layout_height=
"66dp"
android:background=
"@drawable/consultant_bg_sub_pay"
android:layout_marginTop=
"@dimen/platform_dp_16"
android:layout_marginLeft=
"@dimen/platform_dp_16"
android:layout_marginRight=
"@dimen/platform_dp_16"
android:orientation=
"horizontal"
>
<ImageView
android:id=
"@+id/avaterIv"
android:layout_width=
"41dp"
android:layout_height=
"41dp"
android:layout_gravity=
"center_vertical"
android:layout_marginLeft=
"@dimen/platform_dp_12"
android:layout_marginRight=
"@dimen/platform_dp_8"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/nameTv"
android:layout_marginTop=
"@dimen/platform_dp_11"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textSize=
"@dimen/platform_sp_14"
android:textColor=
"#1C1F28"
android:maxLines=
"1"
android:ellipsize=
"end"
android:layout_marginRight=
"@dimen/platform_dp_12"
/>
<TextView
android:id=
"@+id/desTv"
android:layout_marginTop=
"@dimen/platform_dp_6"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textSize=
"@dimen/platform_sp_14"
android:textColor=
"#62636F"
android:maxLines=
"1"
android:ellipsize=
"end"
android:layout_marginBottom=
"@dimen/platform_dp_11"
android:layout_marginRight=
"@dimen/platform_dp_12"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id=
"@+id/pay"
android:layout_below=
"@+id/ll_content"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/platform_dp_40"
android:padding=
"@dimen/platform_dp_9"
android:layout_marginLeft=
"@dimen/platform_dp_16"
android:layout_marginRight=
"@dimen/platform_dp_16"
android:gravity=
"center"
android:background=
"@drawable/consultant_bg_radius_red_20"
android:layout_marginTop=
"@dimen/platform_dp_28"
>
<TextView
android:layout_centerInParent=
"true"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textColor=
"@color/white"
android:textSize=
"@dimen/sp_16"
android:text=
"去付款"
/>
<TextView
android:id=
"@+id/priceTv"
android:layout_centerInParent=
"true"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textColor=
"@color/white"
android:textSize=
"@dimen/sp_16"
android:layout_marginLeft=
"@dimen/platform_dp_5"
android:text=
"¥200"
/>
</LinearLayout>
<TextView
android:id=
"@+id/tv_close"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"稍后再说"
android:layout_below=
"@+id/pay"
android:layout_centerHorizontal=
"true"
android:textSize=
"@dimen/platform_sp_14"
android:paddingLeft=
"@dimen/platform_dp_5"
android:paddingRight=
"@dimen/platform_dp_5"
android:paddingBottom=
"@dimen/platform_dp_3"
android:paddingTop=
"@dimen/platform_dp_3"
android:textColor=
"#62636F"
android:layout_marginTop=
"@dimen/platform_dp_16"
android:layout_marginBottom=
"@dimen/platform_dp_16"
/>
</RelativeLayout>
\ No newline at end of file
m-consultant/src/main/res/values/styles.xml
View file @
d2a42bcb
...
...
@@ -45,4 +45,14 @@
<item
name=
"android:windowNoTitle"
>
true
</item>
<item
name=
"android:windowIsTranslucent"
>
true
</item>
</style>
<style
name=
"dialog_default_style"
parent=
"@android:style/Theme.Dialog"
>
<item
name=
"android:windowBackground"
>
@drawable/consultant_bg_sub_pay_dialog
</item>
<item
name=
"android:windowFrame"
>
@null
</item>
<item
name=
"android:windowNoTitle"
>
true
</item>
<item
name=
"android:windowIsFloating"
>
true
</item>
<item
name=
"android:windowIsTranslucent"
>
true
</item>
<item
name=
"android:backgroundDimEnabled"
>
true
</item>
</style>
</resources>
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