1+ package com.tencent.iot.explorer.link.customview.dialog
2+
3+ import android.content.Context
4+ import android.content.DialogInterface
5+ import android.os.Build
6+ import android.text.Spannable
7+ import android.text.SpannableStringBuilder
8+ import android.text.TextPaint
9+ import android.text.method.LinkMovementMethod
10+ import android.text.style.ClickableSpan
11+ import android.util.Log
12+ import android.view.KeyEvent
13+ import android.view.View
14+ import android.widget.ImageView
15+ import android.widget.RelativeLayout
16+ import android.widget.TextView
17+ import androidx.annotation.RequiresApi
18+ import com.tencent.iot.explorer.link.R
19+
20+ class UserAgreeDialog (context : Context ) : IosCenterStyleDialog(context, R .layout.popup_user_agree_layout), View.OnClickListener, DialogInterface.OnKeyListener {
21+ private var tip_title: TextView ? = null
22+ private var tv_tip_content: TextView ? = null
23+ private var tv_register_tip: TextView ? = null
24+ private var tv_confirm: TextView ? = null
25+ private var tv_cancel: TextView ? = null
26+ private var select_tag_layout: RelativeLayout ? = null
27+ private var iv_agreement: ImageView ? = null
28+ private var iv_agreement_status: ImageView ? = null
29+ @Volatile
30+ private var readed = false
31+
32+ private fun freshReadState () {
33+ if (readed) {
34+ iv_agreement?.setImageResource(R .mipmap.dev_mode_sel)
35+ iv_agreement_status?.visibility = View .VISIBLE
36+ } else {
37+ iv_agreement?.setImageResource(R .mipmap.dev_mode_unsel)
38+ iv_agreement_status?.visibility = View .GONE
39+ }
40+ }
41+
42+ override fun initView () {
43+ tip_title = view.findViewById(R .id.tip_title)
44+ tv_tip_content = view.findViewById(R .id.tv_tip_content)
45+ tv_register_tip = view.findViewById(R .id.tv_register_tip)
46+ tv_confirm = view.findViewById(R .id.tv_confirm)
47+ tv_cancel = view.findViewById(R .id.tv_cancel)
48+ select_tag_layout = view.findViewById(R .id.select_tag_layout)
49+ iv_agreement = view.findViewById(R .id.iv_agreement)
50+ iv_agreement_status = view.findViewById(R .id.iv_agreement_status)
51+
52+ val partStr0 = context.getString(R .string.register_agree_1)
53+ val partStr1 = context.getString(R .string.register_agree_2)
54+ val partStr2 = context.getString(R .string.register_agree_3)
55+ val partStr3 = context.getString(R .string.register_agree_4)
56+ var showStr = partStr1 + partStr2 + partStr3
57+ tip_title?.text = showStr
58+
59+ var agreeStr = partStr0 + showStr
60+ var spannable = SpannableStringBuilder (agreeStr)
61+ spannable.setSpan(IndexClickableSpan (context, 1 ),
62+ partStr0.length, partStr0.length + partStr1.length, Spannable .SPAN_EXCLUSIVE_EXCLUSIVE )
63+ spannable.setSpan(IndexClickableSpan (context, 2 ),
64+ agreeStr.length - partStr1.length, agreeStr.length, Spannable .SPAN_EXCLUSIVE_EXCLUSIVE )
65+ tv_register_tip?.movementMethod = LinkMovementMethod .getInstance()
66+ tv_register_tip?.text = spannable
67+
68+ val agreeContentStrPrefix = context.getString(R .string.rule_content_prefix)
69+ val agreeContentStrSuffix = context.getString(R .string.rule_content_suffix)
70+ var agreeContentStr = agreeContentStrPrefix + showStr + agreeContentStrSuffix
71+ var agreeContentSpannable = SpannableStringBuilder (agreeContentStr)
72+ agreeContentSpannable.setSpan(IndexClickableSpan (context, 1 ),
73+ agreeContentStrPrefix.length, agreeContentStrPrefix.length + partStr1.length, Spannable .SPAN_EXCLUSIVE_EXCLUSIVE )
74+ val start = agreeContentStrPrefix.length + partStr1.length + partStr2.length
75+ agreeContentSpannable.setSpan(IndexClickableSpan (context, 2 ),
76+ start, start + partStr3.length, Spannable .SPAN_EXCLUSIVE_EXCLUSIVE )
77+ tv_tip_content?.movementMethod = LinkMovementMethod .getInstance()
78+ tv_tip_content?.text = agreeContentSpannable
79+
80+ select_tag_layout?.setOnClickListener(this )
81+ tv_cancel?.setOnClickListener(this )
82+ tv_confirm?.setOnClickListener(this )
83+ this .setOnKeyListener(this )
84+ freshReadState()
85+ }
86+
87+ override fun onClick (v : View ? ) {
88+ when (v) {
89+ select_tag_layout -> {
90+ readed = ! readed
91+ freshReadState()
92+ }
93+
94+ tv_cancel -> {
95+ onDismisListener?.onDismised()
96+ }
97+
98+ tv_confirm -> {
99+ if (! readed) return
100+ onDismisListener?.onOkClicked()
101+ dismiss()
102+ }
103+ }
104+ }
105+
106+ @Volatile
107+ private var onDismisListener: OnDismisListener ? = null
108+
109+ interface OnDismisListener {
110+ fun onDismised ()
111+ fun onOkClicked ()
112+ fun onOkClickedUserAgreement ()
113+ fun onOkClickedPrivacyPolicy ()
114+ }
115+
116+ fun setOnDismisListener (onDismisListener : OnDismisListener ? ) {
117+ this .onDismisListener = onDismisListener
118+ }
119+
120+ inner class IndexClickableSpan (context : Context , index : Int ): ClickableSpan() {
121+ private var index = 0
122+ private var context: Context ? = null
123+
124+ init {
125+ this .index = index
126+ this .context = context
127+ }
128+
129+ @RequiresApi(Build .VERSION_CODES .M )
130+ override fun onClick (widget : View ) {
131+ context?.let {
132+ tv_tip_content?.highlightColor = it.getColor(android.R .color.transparent)
133+ tv_register_tip?.highlightColor = it.getColor(android.R .color.transparent)
134+ }
135+ if (index == 1 ) {
136+ onDismisListener?.onOkClickedUserAgreement()
137+ } else if (index == 2 ) {
138+ onDismisListener?.onOkClickedPrivacyPolicy()
139+ }
140+ }
141+
142+ @RequiresApi(Build .VERSION_CODES .M )
143+ override fun updateDrawState (ds : TextPaint ) {
144+ super .updateDrawState(ds)
145+ context?.let {
146+ ds.color = it.getColor(R .color.blue_0066FF)
147+ }
148+ ds.isUnderlineText = false
149+ }
150+ }
151+
152+ override fun onKey (dialog : DialogInterface ? , keyCode : Int , event : KeyEvent ? ): Boolean {
153+ if (keyCode == KeyEvent .KEYCODE_BACK ) {
154+ onDismisListener?.onDismised()
155+ }
156+ return true
157+ }
158+ }
0 commit comments