Browse Source

Add LoginView, RegisterView and BindAccountView

Wayne 6 years ago
parent
commit
ab925013b4

+ 53 - 0
src/main/java/com/kdanmobile/kdanloginregisterui/BaseLoginView.kt

@@ -0,0 +1,53 @@
+package com.kdanmobile.kdanloginregisterui
+
+import com.kdanmobile.kdanloginregisterui.Utils.toSpannable
+
+import android.support.constraint.ConstraintLayout
+import android.content.Context
+import android.text.method.LinkMovementMethod
+import android.util.AttributeSet
+import android.view.View
+import android.widget.TextView
+
+open abstract class BaseLoginView @JvmOverloads constructor(
+        context: Context,
+        attrs: AttributeSet? = null,
+        defStyleAttr: Int = 0) : ConstraintLayout(context, attrs, defStyleAttr) {
+
+    abstract var email: String
+    abstract var pwd: String
+    abstract var isRemember: Boolean
+
+    lateinit var onClickEmailLogin: Runnable
+    lateinit var onClickFbLogin: Runnable
+    lateinit var onClickGoogleLogin: Runnable
+    lateinit var onClickTurnOfService: Runnable
+    lateinit var onClickPrivacyPolicy: Runnable
+    lateinit var onClickSwitchToRegister: Runnable
+    lateinit var onClickPwdHelp: Runnable
+    lateinit var onClickClose: Runnable
+
+    protected fun setupTosAndPpTextView(textView: TextView) {
+        val tos = context.getString(R.string.terms_of_service)
+        val pp = context.getString(R.string.privacy_policy)
+        val textColor = resources.getColor(R.color.tos_pp_text)
+        val tosSS = tos.toSpannable(textColor, false, View.OnClickListener { v -> onClickTurnOfService.run() })
+        val ppSS = pp.toSpannable(textColor, false, View.OnClickListener { v -> onClickPrivacyPolicy.run() })
+        textView.apply {
+            movementMethod = LinkMovementMethod.getInstance()
+            append(tosSS)
+            append(" & ")
+            append(ppSS)
+        }
+    }
+
+    protected fun setupSwitchTextView(textView: TextView) {
+        val s = textView.text
+        val textColor = resources.getColor(R.color.switch_text)
+        val ss = s.toSpannable(textColor, true, View.OnClickListener { v -> onClickSwitchToRegister.run() })
+        textView.apply {
+            movementMethod = LinkMovementMethod.getInstance()
+            text = ss
+        }
+    }
+}

+ 61 - 0
src/main/java/com/kdanmobile/kdanloginregisterui/BaseRegisterView.kt

@@ -0,0 +1,61 @@
+package com.kdanmobile.kdanloginregisterui
+
+import com.kdanmobile.kdanloginregisterui.Utils.toSpannable
+
+import android.support.constraint.ConstraintLayout
+import android.content.Context
+import android.text.method.LinkMovementMethod
+import android.util.AttributeSet
+import android.view.View
+import android.widget.TextView
+
+open abstract class BaseRegisterView @JvmOverloads constructor(
+        context: Context,
+        attrs: AttributeSet? = null,
+        defStyleAttr: Int = 0) : ConstraintLayout(context, attrs, defStyleAttr) {
+
+    abstract val name: String
+    abstract val email: String
+    abstract val pwd: String
+
+    lateinit var onClickEmailRegister: Runnable
+    lateinit var onClickFbRegister: Runnable
+    lateinit var onClickGoogleRegister: Runnable
+    lateinit var onClickTurnOfService: Runnable
+    lateinit var onClickPrivacyPolicy: Runnable
+    lateinit var onClickSwitchToLogin: Runnable
+    lateinit var onClickClose: Runnable
+
+    protected fun setupSwitchTextView(textView: TextView) {
+        val s = textView.text
+        val textColor = resources.getColor(R.color.switch_text)
+        val ss = s.toSpannable(textColor, true, View.OnClickListener { onClickSwitchToLogin.run() })
+        textView.apply {
+            movementMethod = LinkMovementMethod.getInstance()
+            text = ss
+        }
+    }
+
+    protected fun setupTosAndPpTextView(textView: TextView) {
+        try {
+            val key = "[d*_*b]"
+            val tos = context.getString(R.string.terms_of_service)
+            val pp = context.getString(R.string.privacy_policy)
+            val pattern = context.getString(R.string.register_tos_and_pp_pattern, key, key)
+            val stringArray = pattern.split(key)
+            val textColor = resources.getColor(R.color.tos_pp_text)
+            val tosSS = tos.toSpannable(textColor, false, View.OnClickListener { onClickTurnOfService.run() })
+            val ppSS = pp.toSpannable(textColor, false, View.OnClickListener { onClickPrivacyPolicy.run() })
+            textView.apply {
+                movementMethod = LinkMovementMethod.getInstance()
+                append(stringArray[0])
+                append(tosSS)
+                append(stringArray[1])
+                append(ppSS)
+                append(stringArray[2])
+            }
+        } catch (e: Exception) {
+            // do nothing, let it go ~
+        }
+    }
+}

+ 57 - 0
src/main/java/com/kdanmobile/kdanloginregisterui/BindAccountView.kt

@@ -0,0 +1,57 @@
+package com.kdanmobile.kdanloginregisterui
+
+import android.content.Context
+import android.support.constraint.ConstraintLayout
+import android.text.TextUtils
+import android.util.AttributeSet
+import android.view.View
+import kotlinx.android.synthetic.main.activity_bind_account.view.*
+import org.apache.commons.validator.routines.EmailValidator
+
+class BindAccountView @JvmOverloads constructor(
+        context: Context,
+        attrs: AttributeSet? = null,
+        defStyleAttr: Int = 0) : ConstraintLayout(context, attrs, defStyleAttr) {
+
+    var email: String
+        get() = et_bindAccount_email.text.toString()
+        set(value) {}
+    var pwd: String
+        get() = et_bindAccount_pwd.text.toString()
+        set(value) {}
+
+    lateinit var onClickConnect: Runnable
+    lateinit var onClickCreate: Runnable
+    lateinit var onClickBack: Runnable
+    init {
+        View.inflate(context, R.layout.activity_bind_account, this)
+        setThirdPtyName("Google")
+        btn_bindAccount_back.setOnClickListener { onClickBack.run() }
+        btn_bindAccount_create.setOnClickListener { onClickCreate.run() }
+        btn_bindAccount_bind.setOnClickListener { onClickConnectBtn() }
+    }
+
+    protected fun setThirdPtyName(name: String) {
+        tv_bindAccount_createNew.text = context.getString(R.string.bind_account_create_new_text, name)
+        tv_bindAccount_bind.text = context.getString(R.string.bind_account_bind_text, name)
+        tv_bindAccount_bindExplanation.text = context.getString(R.string.bind_account_bind_explanation, name)
+    }
+
+    private fun onClickConnectBtn() {
+        val isEmailValid = !TextUtils.isEmpty(email) && EmailValidator.getInstance().isValid(email)
+        val isPwdValid = !TextUtils.isEmpty(pwd)
+        et_bindAccount_email.error = when {
+            isEmailValid -> null
+            else -> context.getString(R.string.email_login_register_dialog_email_error)
+        }
+        et_bindAccount_pwd.error = when {
+            isPwdValid -> null
+            else -> context.getString(R.string.email_login_register_dialog_pwd_error)
+        }
+        if (isEmailValid && isPwdValid) {
+            onClickConnect.run()
+        }
+    }
+
+
+}

+ 39 - 0
src/main/java/com/kdanmobile/kdanloginregisterui/LoginAView.kt

@@ -0,0 +1,39 @@
+package com.kdanmobile.kdanloginregisterui
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.View
+import kotlinx.android.synthetic.main.activity_login_a.view.*
+
+class LoginAView @JvmOverloads constructor(
+        context: Context,
+        attrs: AttributeSet? = null,
+        defStyleAttr: Int = 0) : BaseLoginView(context, attrs, defStyleAttr) {
+
+    override var email: String
+        get() { return emailLoginFromView_loginA.email }
+        set(value) { emailLoginFromView_loginA.email = value }
+    override var pwd: String
+        get() { return emailLoginFromView_loginA.pwd }
+        set(value) { emailLoginFromView_loginA.pwd = value }
+    override var isRemember: Boolean
+        get() { return emailLoginFromView_loginA.isRemember }
+        set(value) { emailLoginFromView_loginA.isRemember = value }
+
+    init {
+        View.inflate(context, R.layout.activity_login_a, this)
+        setupTosAndPpTextView(tv_loginA_tosAndPp)
+        setupSwitchTextView(tv_loginA_switchToRegister)
+        setupFormView()
+        view_loginA_fbLogin.setOnClickListener { onClickFbLogin.run() }
+        view_loginA_googleLogin.setOnClickListener { onClickGoogleLogin.run() }
+        btn_loginA_close.setOnClickListener { onClickClose.run() }
+    }
+
+    private fun setupFormView() {
+        emailLoginFromView_loginA.let {
+            it.onClickPwdHelp = View.OnClickListener { onClickPwdHelp.run() }
+            it.onSubmit = Runnable { onClickEmailLogin.run() }
+        }
+    }
+}

+ 54 - 0
src/main/java/com/kdanmobile/kdanloginregisterui/LoginBView.kt

@@ -0,0 +1,54 @@
+package com.kdanmobile.kdanloginregisterui
+
+import android.content.Context
+import android.support.v7.app.AlertDialog
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import com.kdanmobile.kdanloginregisterui.widget.EmailLoginFormView
+import kotlinx.android.synthetic.main.activity_login_b.view.*
+
+class LoginBView @JvmOverloads constructor(
+        context: Context,
+        attrs: AttributeSet? = null,
+        defStyleAttr: Int = 0) : BaseLoginView(context, attrs, defStyleAttr) {
+
+    private val view = LayoutInflater.from(context).inflate(R.layout.dialog_email_login, null)
+    private val formView = view.findViewById<EmailLoginFormView>(R.id.formView_emailLoginDialog)
+
+    override var email: String
+        get() { return formView.email }
+        set(value) { formView.email = value }
+    override var pwd: String
+        get() { return formView.pwd }
+        set(value) { formView.pwd = value }
+    override var isRemember: Boolean
+        get() { return formView.isRemember }
+        set(value) { formView.isRemember = value }
+
+    init {
+        View.inflate(context, R.layout.activity_login_b, this)
+        setupTosAndPpTextView(tv_loginB_tosAndPp)
+        setupSwitchTextView(tv_loginB_switchToRegister)
+        setupEmailLoginBtn()
+        view_loginB_fbLogin.setOnClickListener { onClickFbLogin.run() }
+        view_loginB_googleLogin.setOnClickListener { onClickGoogleLogin.run() }
+        btn_loginB_close.setOnClickListener { onClickClose.run() }
+    }
+
+    private fun setupEmailLoginBtn() {
+        view_loginB_emailLogin.setOnClickListener {
+            val dialog = AlertDialog.Builder(context).setView(view).show()
+            formView.let {
+                it.isRemember = isRemember
+                it.email = email
+                it.pwd = pwd
+                it.onSubmit = Runnable {
+                    onClickEmailLogin.run()
+                    dialog.dismiss()
+                }
+                it.onClickPwdHelp = View.OnClickListener { onClickPwdHelp.run() }
+            }
+        }
+    }
+}

+ 30 - 0
src/main/java/com/kdanmobile/kdanloginregisterui/RegisterAView.kt

@@ -0,0 +1,30 @@
+package com.kdanmobile.kdanloginregisterui
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.View
+import kotlinx.android.synthetic.main.activity_register_a.view.*
+
+class RegisterAView @JvmOverloads constructor(
+        context: Context,
+        attrs: AttributeSet? = null,
+        defStyleAttr: Int = 0) : BaseRegisterView(context, attrs, defStyleAttr) {
+
+    override val name: String
+        get() = emailRegisterFromView_registerA.name
+    override val email: String
+        get() = emailRegisterFromView_registerA.email
+    override val pwd: String
+        get() = emailRegisterFromView_registerA.pwd
+
+    init {
+        View.inflate(context, R.layout.activity_register_a, this)
+        setupSwitchTextView(tv_registerA_switchToLogin)
+        setupTosAndPpTextView(tv_registerA_tosAndPp)
+        emailRegisterFromView_registerA.apply {
+            onSubmit = Runnable { onClickEmailRegister.run() }
+        }
+        view_registerA_fbRegister.setOnClickListener { onClickFbRegister.run() }
+        view_registerA_googleRegister.setOnClickListener { onClickGoogleRegister.run() }
+    }
+}

+ 47 - 0
src/main/java/com/kdanmobile/kdanloginregisterui/RegisterBView.kt

@@ -0,0 +1,47 @@
+package com.kdanmobile.kdanloginregisterui
+
+import android.content.Context
+import android.support.v7.app.AlertDialog
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import com.kdanmobile.kdanloginregisterui.widget.EmailRegisterFormView
+import kotlinx.android.synthetic.main.activity_register_b.view.*
+
+class RegisterBView @JvmOverloads constructor(
+        context: Context,
+        attrs: AttributeSet? = null,
+        defStyleAttr: Int = 0) : BaseRegisterView(context, attrs, defStyleAttr) {
+
+    private val view = LayoutInflater.from(context).inflate(R.layout.dialog_email_register, null)
+    private val formView = view.findViewById<EmailRegisterFormView>(R.id.formView_emailRegisterDialog)
+
+    override val name: String
+        get() = formView.name
+    override val email: String
+        get() = formView.email
+    override val pwd: String
+        get() = formView.pwd
+
+    init {
+        View.inflate(context, R.layout.activity_register_b, this)
+        setupSwitchTextView(tv_registerB_switchToLogin)
+        setupTosAndPpTextView(tv_registerB_tosAndPp)
+        setupEmailRegisterBtn()
+        view_registerB_fbRegister.setOnClickListener { onClickFbRegister.run() }
+        view_registerB_googleRegister.setOnClickListener { onClickGoogleRegister.run() }
+        btn_registerB_close.setOnClickListener { onClickClose.run() }
+    }
+
+    private fun setupEmailRegisterBtn() {
+        view_registerB_emailRegister.setOnClickListener {
+            val dialog = AlertDialog.Builder(context).setView(view).show()
+            formView.let {
+                it.onSubmit = Runnable {
+                    onClickEmailRegister.run()
+                    dialog.dismiss()
+                }
+            }
+        }
+    }
+}