Selaa lähdekoodia

1.添加大屏绑定手机号登陆弹窗

王鹏鹏 2 vuotta sitten
vanhempi
commit
1966770f38

+ 167 - 0
baselib/src/main/java/com/yingyangfly/baselib/dialog/BindingPhoneDialog.kt

@@ -1,15 +1,40 @@
 package com.yingyangfly.baselib.dialog
 
+import android.content.Context
 import android.os.Bundle
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.style.ForegroundColorSpan
+import android.view.LayoutInflater
+import android.view.View
 import android.view.ViewGroup
+import androidx.appcompat.widget.AppCompatButton
+import androidx.appcompat.widget.AppCompatEditText
 import androidx.fragment.app.DialogFragment
+import com.gyf.immersionbar.BarHide
+import com.gyf.immersionbar.ktx.immersionBar
 import com.yingyangfly.baselib.R
+import com.yingyangfly.baselib.ext.click
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.baselib.net.BaseObserver
+import com.yingyangfly.baselib.net.BaselibServiceFactory
+import com.yingyangfly.baselib.net.MyRxScheduler
+import com.yingyangfly.baselib.utils.RxTimer
+import com.yingyangfly.baselib.utils.ViewTool
+import io.reactivex.schedulers.Schedulers
 
 /**
  * 大屏测评绑定手机号弹窗
  */
 class BindingPhoneDialog : DialogFragment() {
 
+    private var editPhone: AppCompatEditText? = null
+    private var editCode: AppCompatEditText? = null
+    private var btnCode: AppCompatButton? = null
+    private var btnBinding: AppCompatButton? = null
+    private lateinit var rxTimer: RxTimer
+    private var mContent: Context? = null
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         isCancelable = false
@@ -24,4 +49,146 @@ class BindingPhoneDialog : DialogFragment() {
         )
         dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
     }
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        immersionBar {
+            hideBar(BarHide.FLAG_HIDE_BAR)
+            navigationBarColor(R.color.transparent)
+        }
+        val rootView = ViewTool.inflateFragmentPixels(
+            activity, R.layout.dialog_binding_phone, container, 1194, 834
+        )
+        mContent = activity
+        findId(rootView)
+        init()
+        initListener()
+        return rootView
+    }
+
+    private fun findId(rootView: View) {
+        editPhone = rootView.findViewById(R.id.editPhone)
+        editCode = rootView.findViewById(R.id.editCode)
+        btnCode = rootView.findViewById(R.id.btnCode)
+        btnBinding = rootView.findViewById(R.id.btnBinding)
+    }
+
+    private fun init() {
+        rxTimer = RxTimer()
+
+    }
+
+    private fun initListener() {
+        btnCode?.click {
+            if (mContent != null) {
+                if (editCode?.text.toString().trim().isEmpty()) {
+                    "请输入验证码".toast()
+                } else {
+                    sendCode()
+                }
+            }
+        }
+
+        btnBinding?.click {
+            if (mContent != null) {
+                if (judgeByCode()) {
+                    login()
+                }
+            }
+        }
+    }
+
+    /**
+     * 非空验证
+     */
+    private fun judgeByCode(): Boolean {
+        if (editPhone?.text.toString().trim().isEmpty()) {
+            "请输入手机号".toast()
+            return false
+        }
+        if (editCode?.text.toString().trim().isEmpty()) {
+            "请输入验证码".toast()
+            return false
+        }
+        return true
+    }
+
+    /**
+     * 发送验证码
+     */
+    private fun sendCode() {
+        BaselibServiceFactory.getService()
+            .sendCode(editPhone?.text.toString().trim())
+            .subscribeOn(Schedulers.io())
+            .compose(MyRxScheduler.ioMain(mContent!!, true))
+            .subscribe(object : BaseObserver<Any>() {
+                override fun onSuccess(t: Any?) {
+                    timer()
+                }
+
+                override fun onFail(msg: String) {
+                    msg.toast()
+                }
+            })
+    }
+
+    /**
+     * 登录
+     */
+    private fun login() {
+        BaselibServiceFactory.getService()
+            .loginMsg(editPhone?.text.toString().trim(), editCode?.text.toString().trim())
+            .subscribeOn(Schedulers.io())
+            .compose(MyRxScheduler.ioMain(mContent!!, true))
+            .subscribe(object : BaseObserver<String>() {
+                override fun onSuccess(t: String?) {
+                    "登陆成功".toast()
+                    dismiss()
+                }
+
+                override fun onFail(msg: String) {
+                    msg.toast()
+                }
+            })
+    }
+
+    /**
+     * 开始倒计时
+     */
+    private fun timer() {
+        btnCode?.isClickable = false
+        val time = 60.toLong()
+        val m: Long = 1000
+        btnCode?.text = setTvSendColor("重新发送(${time}s)")
+        rxTimer.interval(m) {
+            if (it == time - 1) {
+                rxTimer.cancel()
+                btnCode?.text = "重新发送"
+                btnCode?.isClickable = true
+            } else {
+                btnCode?.text = setTvSendColor("重新发送(${time - 1 - it}s)")
+            }
+        }
+    }
+
+    private fun setTvSendColor(str: String): SpannableString {
+        val startIndex = "重新发送(".length - 1
+        val spannableString = SpannableString(str)
+        spannableString.setSpan(
+            ForegroundColorSpan(resources.getColor(R.color.color_FF92ADFF)),
+            0,
+            startIndex,
+            Spanned.SPAN_INCLUSIVE_EXCLUSIVE
+        )
+        return spannableString
+    }
+
+    override fun dismiss() {
+        rxTimer.cancel()
+        super.dismiss()
+    }
+
 }

+ 17 - 0
baselib/src/main/java/com/yingyangfly/baselib/net/BaselibApiService.kt

@@ -35,4 +35,21 @@ interface BaselibApiService {
     @POST("im/user_sign")
     fun getUserSign(@Query("userId") userId: String): Observable<XBaseEntity<String>>
 
+    /**
+     * 获取验证码
+     */
+    @POST("app/getCheckCode")
+    fun sendCode(
+        @Query("mobile") mobile: String
+    ): Observable<XBaseEntity<Any>>
+
+    /**
+     * 验证码登录
+     */
+    @POST("app/loginMsg")
+    fun loginMsg(
+        @Query("mobile") mobile: String,
+        @Query("checkCode") checkCode: String
+    ): Observable<XBaseEntity<String>>
+
 }

+ 4 - 2
baselib/src/main/res/layout/dialog_binding_phone.xml

@@ -44,7 +44,8 @@
                 android:layout_marginEnd="@dimen/divider_64px"
                 android:background="@drawable/bg_binding_phone_edit"
                 android:gravity="center_vertical"
-                android:hint="输入手机号"
+                android:hint="请输入手机号"
+                android:inputType="number"
                 android:paddingStart="@dimen/divider_24px"
                 android:paddingEnd="@dimen/divider_24px"
                 android:textColor="@color/color_FF333333"
@@ -74,7 +75,8 @@
                     android:layout_weight="1"
                     android:background="@null"
                     android:gravity="center_vertical"
-                    android:hint="输入验证码"
+                    android:hint="请输入验证码"
+                    android:inputType="number"
                     android:paddingStart="@dimen/divider_24px"
                     android:paddingEnd="@dimen/divider_24px"
                     android:textColor="@color/color_FF333333"

+ 3 - 2
baselib/src/main/res/values/colors.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
     <color name="white">#FFFFFFFF</color>
     <color name="color_1890FF">#1890FF</color>
     <color name="CC000000">#CC000000</color>
@@ -8,7 +8,7 @@
     <!--分割线颜色-->
     <color name="color_F5F5F5">#F5F5F5</color>
     <color name="color_d8000000">#d8000000</color>
-    <color name="color_FF5F3100" tools:ignore="MissingDefaultResource">#FF5F3100</color>
+    <color name="color_FF5F3100">#FF5F3100</color>
     <color name="transparent">#00000000</color><!-- 透明   -->
     <!--    标题底部边框颜色-->
     <color name="color_FFF6A532">#FFF6A532</color>
@@ -36,4 +36,5 @@
     <color name="color_FF3855FF">#FF3855FF</color>
     <color name="color_FF81D7FF">#FF81D7FF</color>
     <color name="color_FF1AA1FF">#FF1AA1FF</color>
+    <color name="color_FF92ADFF">#FF92ADFF</color>
 </resources>