1+ package io.wookey.wallet.dialog
2+
3+ import android.content.Intent
4+ import android.os.Bundle
5+ import android.text.SpannableString
6+ import android.text.method.LinkMovementMethod
7+ import android.text.method.ScrollingMovementMethod
8+ import android.util.Log
9+ import android.view.LayoutInflater
10+ import android.view.View
11+ import android.view.ViewGroup
12+ import android.view.WindowManager
13+ import androidx.core.content.ContextCompat
14+ import androidx.fragment.app.DialogFragment
15+ import io.wookey.wallet.R
16+ import io.wookey.wallet.feature.setting.WebViewActivity
17+ import io.wookey.wallet.support.BackgroundHelper
18+ import io.wookey.wallet.support.extensions.clickableSpan
19+ import io.wookey.wallet.support.extensions.dp2px
20+ import io.wookey.wallet.support.extensions.getCurrentLocale
21+ import io.wookey.wallet.support.extensions.screenWidth
22+ import kotlinx.android.synthetic.main.dialog_privacy.*
23+
24+ class PrivacyDialog : DialogFragment () {
25+
26+ private var confirmListener: (() -> Unit )? = null
27+ private var cancelListener: (() -> Unit )? = null
28+
29+ override fun onCreate (savedInstanceState : Bundle ? ) {
30+ super .onCreate(savedInstanceState)
31+ setStyle(STYLE_NO_TITLE , R .style.CustomDialog )
32+ isCancelable = false
33+ }
34+
35+ override fun onCreateView (
36+ inflater : LayoutInflater ,
37+ container : ViewGroup ? ,
38+ savedInstanceState : Bundle ?
39+ ): View ? {
40+ return inflater.inflate(R .layout.dialog_privacy, container, false )
41+ }
42+
43+ override fun onActivityCreated (savedInstanceState : Bundle ? ) {
44+ super .onActivityCreated(savedInstanceState)
45+
46+ val layoutParams = dialogContainer.layoutParams
47+ layoutParams.width = (screenWidth() * 0.85 ).toInt()
48+ layoutParams.height = WindowManager .LayoutParams .WRAP_CONTENT
49+
50+ dialogContainer.background =
51+ BackgroundHelper .getBackground(context, R .color.color_FFFFFF, dp2px(5 ))
52+ confirm.background = BackgroundHelper .getButtonBackground(context)
53+
54+ val agreement = getString(R .string.user_agreement)
55+ val privacy = getString(R .string.privacy)
56+ val contentText = getString(R .string.dialog_content_privacy, agreement, privacy)
57+
58+ val start1 = contentText.indexOf(agreement)
59+ val end1 = start1 + agreement.length
60+ val start2 = contentText.indexOf(privacy)
61+ val end2 = start2 + privacy.length
62+
63+ val style = SpannableString (contentText)
64+ style.clickableSpan(start1.. end1, ContextCompat .getColor(activity!! , R .color.color_2179FF)) {
65+ startActivity(Intent (activity, WebViewActivity ::class .java).apply {
66+ putExtra(" url" , " https://wallet.wookey.io/service-docs/terms-of-service.html" )
67+ })
68+ }
69+ style.clickableSpan(start2.. end2, ContextCompat .getColor(activity!! , R .color.color_2179FF)) {
70+ startActivity(Intent (activity, WebViewActivity ::class .java).apply {
71+ putExtra(" url" , " https://wallet.wookey.io/service-docs/privacy-policy.html?lang=${activity?.getCurrentLocale()} " )
72+ })
73+ }
74+
75+ content.text = style
76+ content.movementMethod = LinkMovementMethod .getInstance()
77+
78+ confirm.setOnClickListener {
79+ confirmListener?.invoke()
80+ hide()
81+ }
82+
83+ cancel.setOnClickListener {
84+ hide()
85+ cancelListener?.invoke()
86+ }
87+ }
88+
89+ fun hide () {
90+ val activity = activity
91+ if (activity != null && ! activity.isFinishing && ! activity.isDestroyed) {
92+ dismiss()
93+ }
94+ }
95+
96+ companion object {
97+ private const val TAG = " PrivacyDialog"
98+ fun newInstance (): PrivacyDialog {
99+ val fragment = PrivacyDialog ()
100+ return fragment
101+ }
102+
103+ fun display (
104+ fm : androidx.fragment.app.FragmentManager ,
105+ confirmListener : (() -> Unit )? ,
106+ cancelListener : (() -> Unit )?
107+ ) {
108+ val ft = fm.beginTransaction()
109+ val prev = fm.findFragmentByTag(TAG )
110+ if (prev != null ) {
111+ ft.remove(prev)
112+ }
113+ ft.addToBackStack(null )
114+ newInstance().apply {
115+ this .confirmListener = confirmListener
116+ this .cancelListener = cancelListener
117+ }.show(ft, TAG )
118+ }
119+ }
120+ }
0 commit comments