Browse Source

v1.0.0开发:会员中心UI开发

#Suyghur 3 years ago
parent
commit
2a688b13e8
50 changed files with 1510 additions and 84 deletions
  1. 1 1
      demo/build.gradle
  2. 5 5
      demo/src/main/AndroidManifest.xml
  3. 2 7
      demo/src/main/java/com/eyuangame/demo/DemoActivity.kt
  4. 1 1
      demo/src/main/java/com/eyuangame/demo/DemoApplication.kt
  5. 1 1
      demo/src/main/java/com/eyuangame/demo/EnvActivity.kt
  6. 1 1
      demo/src/main/java/com/eyuangame/demo/Item.kt
  7. 1 1
      demo/src/main/java/com/eyuangame/demo/WelcomeActivity.kt
  8. 10 5
      keystore.properties
  9. 8 0
      library_core/src/main/AndroidManifest.xml
  10. 4 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/entity/ClickType.kt
  11. 3 2
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/SdkBridgeImpl.kt
  12. 196 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberActivity.kt
  13. 20 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberCenterImpl.kt
  14. 14 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberFragmentTag.kt
  15. 98 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/BindAccountFragment.kt
  16. 197 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/BindPhoneFragment.kt
  17. 99 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/MainFragment.kt
  18. 114 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/ModifyPwdFragment.kt
  19. 6 2
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/floatball/FloatCenterService.kt
  20. 5 5
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/floatball/FloatCenterServiceManager.kt
  21. 13 9
      library_core/src/main/java/cn/yyxx/eyuangame/core/network/Host.kt
  22. 41 10
      library_core/src/main/java/cn/yyxx/eyuangame/core/network/SdkRequest.kt
  23. 2 2
      library_core/src/main/java/cn/yyxx/eyuangame/core/network/VolleyRequest.kt
  24. 1 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/ui/dialog/ForgetPwdDialog.kt
  25. 18 16
      library_core/src/main/java/cn/yyxx/eyuangame/core/ui/floatview/FloatingBall.kt
  26. 4 2
      library_core/src/main/java/cn/yyxx/eyuangame/core/ui/floatview/FloatingBallMenu.kt
  27. 5 0
      library_core/src/main/res/anim/yyxx_fragment_popup_anim.xml
  28. 5 0
      library_core/src/main/res/anim/yyxx_fragment_push_anim.xml
  29. BIN
      library_core/src/main/res/drawable-xhdpi/yyxx_float_logo_img.png
  30. BIN
      library_core/src/main/res/drawable-xhdpi/yyxx_modify_pwd_img.png
  31. BIN
      library_core/src/main/res/drawable-xhdpi/yyxx_phone_img.png
  32. 9 0
      library_core/src/main/res/drawable/yyxx_green_blue_panel_content_bg.xml
  33. 9 0
      library_core/src/main/res/drawable/yyxx_white70_panel_content_bg.xml
  34. 0 0
      library_core/src/main/res/drawable/yyxx_white_panel_bg.xml
  35. 9 0
      library_core/src/main/res/drawable/yyxx_white_panel_title_bg.xml
  36. 2 2
      library_core/src/main/res/layout/yyxx_agreement_dialog.xml
  37. 1 1
      library_core/src/main/res/layout/yyxx_auto_login_dialog.xml
  38. 1 1
      library_core/src/main/res/layout/yyxx_choose_login_dialog.xml
  39. 3 3
      library_core/src/main/res/layout/yyxx_floating_ball_item.xml
  40. 2 2
      library_core/src/main/res/layout/yyxx_forget_pwd_dialog.xml
  41. 1 1
      library_core/src/main/res/layout/yyxx_login.xml
  42. 19 0
      library_core/src/main/res/layout/yyxx_member.xml
  43. 99 0
      library_core/src/main/res/layout/yyxx_member_bind_account.xml
  44. 197 0
      library_core/src/main/res/layout/yyxx_member_bind_phone.xml
  45. 182 0
      library_core/src/main/res/layout/yyxx_member_main.xml
  46. 86 0
      library_core/src/main/res/layout/yyxx_member_modify_pwd.xml
  47. 1 1
      library_core/src/main/res/layout/yyxx_tips_dialog.xml
  48. 1 0
      library_core/src/main/res/values/yyxx_colors.xml
  49. 13 2
      library_core/src/main/res/values/yyxx_strings.xml
  50. BIN
      zkeystore/shzd_yyxx.keystore

+ 1 - 1
demo/build.gradle

@@ -12,7 +12,7 @@ android {
     buildToolsVersion BUILD_TOOLS_VERSION
 
     defaultConfig {
-        applicationId "com.yyxxgame.columbus"
+        applicationId "com.shzd.eyuangame"
         minSdkVersion MIN_SDK_VERSION
         targetSdkVersion TARGET_SDK_VERSION
         versionCode 1

+ 5 - 5
demo/src/main/AndroidManifest.xml

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.yyxxgame.columbus">
+    package="com.eyuangame.demo">
 
     <application
-        android:name=".DemoApplication"
+        android:name="com.eyuangame.demo.DemoApplication"
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
@@ -13,7 +13,7 @@
         android:theme="@style/AppTheme">
 
         <activity
-            android:name=".WelcomeActivity"
+            android:name="com.eyuangame.demo.WelcomeActivity"
             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
             android:launchMode="standard"
             android:screenOrientation="portrait"
@@ -25,7 +25,7 @@
         </activity>
 
         <activity
-            android:name=".DemoActivity"
+            android:name="com.eyuangame.demo.DemoActivity"
             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
             android:exported="true"
             android:launchMode="singleTask"
@@ -37,7 +37,7 @@
         </activity>
 
         <activity
-            android:name=".EnvActivity"
+            android:name="com.eyuangame.demo.EnvActivity"
             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
             android:exported="true"
             android:launchMode="singleTask"

+ 2 - 7
demo/src/main/java/com/yyxxgame/columbus/DemoActivity.kt → demo/src/main/java/com/eyuangame/demo/DemoActivity.kt

@@ -1,4 +1,4 @@
-package com.yyxxgame.columbus
+package com.eyuangame.demo
 
 import android.app.Activity
 import android.content.Intent
@@ -11,8 +11,7 @@ import android.view.View
 import android.widget.*
 import cn.yyxx.eyuangame.base.EYuanGame
 import cn.yyxx.eyuangame.base.internal.ICallback
-import cn.yyxx.eyuangame.base.utils.Logger
-import cn.yyxx.eyuangame.core.impl.SdkDrive
+import cn.yyxx.eyuangame.core.impl.center.MemberActivity
 import cn.yyxx.support.hawkeye.LogUtils
 import kotlin.system.exitProcess
 
@@ -113,10 +112,6 @@ class DemoActivity : Activity(), View.OnClickListener {
                         }
                     })
                 }
-                3 -> {
-                    val result = SdkDrive.instance.test()
-                    Logger.d(result)
-                }
             }
         }
     }

+ 1 - 1
demo/src/main/java/com/yyxxgame/columbus/DemoApplication.kt → demo/src/main/java/com/eyuangame/demo/DemoApplication.kt

@@ -1,4 +1,4 @@
-package com.yyxxgame.columbus
+package com.eyuangame.demo
 
 import android.content.Context
 import cn.yyxx.eyuangame.base.EYuanGameApplication

+ 1 - 1
demo/src/main/java/com/yyxxgame/columbus/EnvActivity.kt → demo/src/main/java/com/eyuangame/demo/EnvActivity.kt

@@ -1,4 +1,4 @@
-package com.yyxxgame.columbus
+package com.eyuangame.demo
 
 import android.app.Activity
 import android.content.Intent

+ 1 - 1
demo/src/main/java/com/yyxxgame/columbus/Item.kt → demo/src/main/java/com/eyuangame/demo/Item.kt

@@ -1,4 +1,4 @@
-package com.yyxxgame.columbus
+package com.eyuangame.demo
 
 /**
  * @author #Suyghur,

+ 1 - 1
demo/src/main/java/com/yyxxgame/columbus/WelcomeActivity.kt → demo/src/main/java/com/eyuangame/demo/WelcomeActivity.kt

@@ -1,4 +1,4 @@
-package com.yyxxgame.columbus
+package com.eyuangame.demo
 
 import android.app.Activity
 import android.content.Intent

+ 10 - 5
keystore.properties

@@ -1,10 +1,15 @@
 #demo
-storePassword=demo6ztv_yyxx2021
-keyPassword=demo6ztv_yyxx2021
-keyAlias=alias.demo_yyxx2021
-storeFile=../zkeystore/demo_yyxx.keystore
+#storePassword=demo6ztv_yyxx2021
+#keyPassword=demo6ztv_yyxx2021
+#keyAlias=alias.demo_yyxx2021
+#storeFile=../zkeystore/demo_yyxx.keystore
 
 #storePassword=demo53ux_yyxx2021
 #keyPassword=demo53ux_yyxx2021
 #keyAlias=alias.demo_yyxx2021
-#storeFile=../zkeystore/demo_yyxx_backup.keystore
+#storeFile=../zkeystore/demo_yyxx_backup.keystore
+
+storePassword=shzd1y28_yyxx2021
+keyPassword=shzd1y28_yyxx2021
+keyAlias=alias.shzd_yyxx2021
+storeFile=../zkeystore/shzd_yyxx.keystore

+ 8 - 0
library_core/src/main/AndroidManifest.xml

@@ -25,6 +25,14 @@
             android:theme="@style/ColumbusTheme"
             android:windowSoftInputMode="adjustResize|stateHidden|stateVisible" />
 
+        <activity
+            android:name=".impl.center.MemberActivity"
+            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
+            android:imeOptions="flagNoFullscreen|flagNoExtractUi"
+            android:launchMode="singleTask"
+            android:theme="@style/ColumbusTheme"
+            android:windowSoftInputMode="adjustResize|stateHidden|stateVisible" />
+
 
         <service
             android:name=".impl.floatball.FloatCenterService"

+ 4 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/entity/ClickType.kt

@@ -21,4 +21,8 @@ object ClickType {
     const val ACTION_CONFIRM = 1011
     const val ACTION_MORE_ACCOUNT = 1012
     const val ACTION_CLICK_EYE = 1013
+    const val ACTION_BIND_ACCOUNT = 1014
+    const val ACTION_BIND_PHONE = 1015
+    const val ACTION_MODIFY_PWD = 1016
+    const val ACTION_GET_CAPTCHA = 1017
 }

+ 3 - 2
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/SdkBridgeImpl.kt

@@ -226,6 +226,7 @@ class SdkBridgeImpl(context: Context) {
         this.mActivity = activity
         this.roleInfo = null
         SdkBackLoginInfo.instance.reset()
+        FloatCenterServiceManager.instance.detach()
         callback.onResult(0, "用户登出成功")
     }
 
@@ -331,14 +332,14 @@ class SdkBridgeImpl(context: Context) {
     fun onResume(activity: Activity) {
         Logger.i("EYuanGameSdk onResume ...")
         this.mActivity = activity
-        FloatCenterServiceManager.instance.show()
+        FloatCenterServiceManager.instance.attach()
 
     }
 
     fun onPause(activity: Activity) {
         Logger.i("EYuanGameSdk onPause ...")
         this.mActivity = activity
-        FloatCenterServiceManager.instance.hide()
+        FloatCenterServiceManager.instance.detach()
 
     }
 

+ 196 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberActivity.kt

@@ -0,0 +1,196 @@
+package cn.yyxx.eyuangame.core.impl.center
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Build
+import android.os.Bundle
+import android.view.MotionEvent
+import android.view.View
+import android.view.WindowManager
+import android.view.inputmethod.InputMethodManager
+import android.widget.EditText
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
+import cn.yyxx.eyuangame.core.impl.center.fragment.BindAccountFragment
+import cn.yyxx.eyuangame.core.impl.center.fragment.BindPhoneFragment
+import cn.yyxx.eyuangame.core.impl.center.fragment.MainFragment
+import cn.yyxx.eyuangame.core.impl.center.fragment.ModifyPwdFragment
+import cn.yyxx.support.AndroidBug5497Workaround
+import cn.yyxx.support.ResUtils
+import java.util.*
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/06/30
+ */
+class MemberActivity : FragmentActivity() {
+
+    private var mainFragment: MainFragment? = null
+    private var bindAccountFragment: BindAccountFragment? = null
+    private var bindPhoneFragment: BindPhoneFragment? = null
+    private var modifyPwdFragment: ModifyPwdFragment? = null
+
+    private val fragmentStack = LinkedList<String>()
+    private var currentFragmentTag = ""
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        initView()
+        initFragment()
+    }
+
+    private fun initView() {
+        if (SdkBridgeImpl.isLand) {
+            window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
+        }
+        setContentView(ResUtils.getResId(this, "yyxx_member", "layout"))
+
+        if (!SdkBridgeImpl.isLand) {
+            AndroidBug5497Workaround.assistActivity(this)
+        }
+
+    }
+
+    private fun initFragment() {
+        mainFragment = MainFragment()
+        switchFragment(mainFragment!!, MemberFragmentTag.MAIN)
+    }
+
+    fun switchFragment(tag: String) {
+        when (tag) {
+            MemberFragmentTag.MAIN -> {
+                mainFragment?.apply {
+                    mainFragment = null
+                }
+                mainFragment = MainFragment()
+                switchFragment(mainFragment!!, tag)
+            }
+            MemberFragmentTag.BIND_ACCOUNT -> {
+                bindAccountFragment?.apply {
+                    bindAccountFragment = null
+                }
+                bindAccountFragment = BindAccountFragment()
+                switchFragment(bindAccountFragment!!, tag)
+            }
+            MemberFragmentTag.BIND_PHONE -> {
+                bindPhoneFragment?.apply {
+                    bindPhoneFragment = null
+                }
+                bindPhoneFragment = BindPhoneFragment()
+                switchFragment(bindPhoneFragment!!, tag)
+            }
+            MemberFragmentTag.MODIFY_PWD -> {
+                modifyPwdFragment?.apply {
+                    modifyPwdFragment = null
+                }
+                modifyPwdFragment = ModifyPwdFragment()
+                switchFragment(modifyPwdFragment!!, tag)
+            }
+        }
+    }
+
+    fun switchFragment(fragment: Fragment, tag: String) {
+        if (fragmentStack.contains(tag)) {
+            //栈里最后一个与tag相同才执行删除
+            if (fragmentStack.size > 1 && !fragmentStack.last.equals(tag)) {
+                fragmentStack.removeLast()
+            }
+        } else {
+            fragmentStack.add(tag)
+        }
+
+        val transaction = supportFragmentManager.beginTransaction()
+        transaction.setCustomAnimations(ResUtils.getResId(this, "yyxx_fragment_push_anim", "anim"), ResUtils.getResId(this, "yyxx_fragment_popup_anim", "anim"))
+        var tagFragment = supportFragmentManager.findFragmentByTag(currentFragmentTag)
+        if (tagFragment != null && tag != currentFragmentTag) {
+            tagFragment.onPause()
+            transaction.hide(tagFragment)
+        }
+        tagFragment = supportFragmentManager.findFragmentByTag(tag)
+        if (tagFragment == null) {
+            transaction.add(ResUtils.getResId(this, "yyxx_cl_member_center", "id"), fragment, tag)
+        } else {
+            tagFragment.onResume()
+            transaction.show(tagFragment)
+        }
+
+        currentFragmentTag = tag
+        transaction.commitAllowingStateLoss()
+
+    }
+
+    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
+        ev?.let {
+            if (it.action == MotionEvent.ACTION_DOWN) {
+                val v = currentFocus
+                if (isShouldHideInput(v, it)) {
+                    val imm = this@MemberActivity.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
+                    imm.hideSoftInputFromWindow(v!!.windowToken, 0)
+                }
+                return super.dispatchTouchEvent(it)
+            }
+        }
+        // 必不可少,否则所有的组件都不会有TouchEvent了
+        return if (window.superDispatchTouchEvent(ev)) {
+            true
+        } else onTouchEvent(ev)
+    }
+
+    private fun hideBar() {
+        // The UI options currently enabled are represented by a bitfield.
+        // getSystemUiVisibility() gives us that bitfield.
+        val uiOptions = window.decorView.systemUiVisibility
+        var newUiOptions = uiOptions
+        val isImmersiveModeEnabled = uiOptions or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY == uiOptions
+        if (!isImmersiveModeEnabled) {
+            if (Build.VERSION.SDK_INT >= 14) {
+                newUiOptions = newUiOptions or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+            }
+            if (Build.VERSION.SDK_INT >= 16) {
+                newUiOptions = newUiOptions or View.SYSTEM_UI_FLAG_FULLSCREEN
+            }
+            if (Build.VERSION.SDK_INT >= 18) {
+                newUiOptions = newUiOptions or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+            }
+            window.decorView.systemUiVisibility = newUiOptions
+        }
+    }
+
+
+    private fun isShouldHideInput(v: View?, event: MotionEvent): Boolean {
+        if (v is EditText) {
+            val leftTop = intArrayOf(0, 0)
+            //获取输入框当前的location位置
+            v.getLocationInWindow(leftTop)
+            val left = leftTop[0]
+            val top = leftTop[1]
+            val bottom = top + v.getHeight()
+            val right = left + v.getWidth()
+            // 点击的是输入框区域,保留点击EditText的事件
+            return event.x <= left || event.x >= right || event.y <= top || event.y >= bottom
+        }
+        return false
+    }
+
+
+    override fun onResume() {
+        super.onResume()
+        hideBar()
+    }
+
+    override fun onBackPressed() {
+        if (!fragmentStack.isNullOrEmpty() && fragmentStack.size > 1) {
+            fragmentStack.removeLast()
+            switchFragment(fragmentStack.last)
+        } else {
+            super.onBackPressed()
+        }
+    }
+
+    companion object {
+        fun start(activity: Activity) {
+            activity.startActivity(Intent(activity, MemberActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
+        }
+    }
+}

+ 20 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberCenterImpl.kt

@@ -0,0 +1,20 @@
+package cn.yyxx.eyuangame.core.impl.center
+
+import android.app.Activity
+import cn.yyxx.eyuangame.core.internal.IImplCallback
+import org.json.JSONException
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/06/30
+ */
+class MemberCenterImpl(val implCallback: IImplCallback) {
+
+    fun bindAccount(activity: Activity, userName: String, pwd: String) {
+        try {
+
+        } catch (e: JSONException) {
+            e.printStackTrace()
+        }
+    }
+}

+ 14 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberFragmentTag.kt

@@ -0,0 +1,14 @@
+package cn.yyxx.eyuangame.core.impl.center
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/06/30
+ */
+object MemberFragmentTag {
+
+    const val MAIN = "MainFragment"
+    const val BIND_ACCOUNT = "BindAccountFragment"
+    const val BIND_PHONE = "BindPhoneFragment"
+    const val MODIFY_PWD = "ModifyPwdFragment"
+
+}

+ 98 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/BindAccountFragment.kt

@@ -0,0 +1,98 @@
+package cn.yyxx.eyuangame.core.impl.center.fragment
+
+import android.os.Bundle
+import android.text.InputType
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.ImageView
+import androidx.fragment.app.Fragment
+import cn.yyxx.eyuangame.core.entity.ClickType
+import cn.yyxx.eyuangame.core.impl.center.MemberActivity
+import cn.yyxx.eyuangame.core.ui.EventEditText
+import cn.yyxx.support.ResUtils
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/06/30
+ */
+class BindAccountFragment : Fragment(), View.OnClickListener {
+
+    private lateinit var mView: View
+    private lateinit var memberImpl: MemberActivity
+
+    private lateinit var ivReturn: ImageView
+    private lateinit var eetAccount: EventEditText
+    private lateinit var eetPwd: EventEditText
+    private lateinit var btnConfirm: Button
+
+    private var imgShow = 0
+    private var imgHide = 0
+    private var isShowText = false
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        super.onCreateView(inflater, container, savedInstanceState)
+        memberImpl = requireActivity() as MemberActivity
+        mView = layoutInflater.inflate(ResUtils.getResId(requireActivity(), "yyxx_member_bind_account", "layout"), container, false)
+        initView(mView)
+        return mView
+    }
+
+    private fun initView(view: View) {
+
+        imgShow = ResUtils.getResId(requireActivity(), "yyxx_show_img", "drawable")
+        imgHide = ResUtils.getResId(requireActivity(), "yyxx_hide_img", "drawable")
+
+        ivReturn = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_return", "id"))
+        ivReturn.apply {
+            tag = ClickType.ACTION_RETURN
+            setOnClickListener(this@BindAccountFragment)
+        }
+
+        eetAccount = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_account", "id"))
+        eetAccount.apply {
+            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_account_img", "drawable"))
+            leftImageView.visibility = View.VISIBLE
+            rightImageView.visibility = View.GONE
+            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_bind_account_uname", "string"))
+        }
+
+        eetPwd = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_pwd", "id"))
+        eetPwd.apply {
+            editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_pwd_img", "drawable"))
+            leftImageView.visibility = View.VISIBLE
+            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_bind_account_pwd", "string"))
+            rightImageView.setBackgroundResource(imgShow)
+            rightImageView.visibility = View.VISIBLE
+            rightImageView.setOnClickListener {
+                if (!isShowText) {
+                    isShowText = true
+                    rightImageView.setBackgroundResource(imgHide)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
+                } else {
+                    isShowText = false
+                    rightImageView.setBackgroundResource(imgShow)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+                }
+                editText.setSelection(editText.length())
+            }
+        }
+
+        btnConfirm = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_confirm", "id"))
+        btnConfirm.apply {
+            tag = ClickType.ACTION_CONFIRM
+            setOnClickListener(this@BindAccountFragment)
+        }
+    }
+
+    override fun onClick(v: View?) {
+        v?.apply {
+            when (tag as Int) {
+                ClickType.ACTION_RETURN -> requireActivity().onBackPressed()
+                ClickType.ACTION_CONFIRM->memberImpl
+            }
+        }
+    }
+}

+ 197 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/BindPhoneFragment.kt

@@ -0,0 +1,197 @@
+package cn.yyxx.eyuangame.core.impl.center.fragment
+
+import android.content.Context
+import android.graphics.Color
+import android.os.Bundle
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.*
+import androidx.fragment.app.Fragment
+import cn.yyxx.eyuangame.core.entity.ClickType
+import cn.yyxx.eyuangame.core.impl.center.MemberActivity
+import cn.yyxx.eyuangame.core.ui.EventEditText
+import cn.yyxx.support.ResUtils
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/06/30
+ */
+class BindPhoneFragment : Fragment(), View.OnClickListener {
+
+    private lateinit var mView: View
+    private lateinit var memberImpl: MemberActivity
+
+    private lateinit var ivReturn: ImageView
+    private lateinit var eetPhone: EventEditText
+    private lateinit var eetCaptcha: EventEditText
+    private lateinit var btnCaptCha: Button
+    private lateinit var btnConfirm: Button
+
+    private lateinit var tvArea: TextView
+    private lateinit var ivArrow: ImageView
+
+    private lateinit var rlAreaList: RelativeLayout
+    private lateinit var llAreaList: LinearLayout
+    private lateinit var svAreaList: ScrollView
+
+    private val areaList = mutableListOf<String>()
+
+    private var imgUp = 0
+    private var imgDown = 0
+
+    private var code = ""
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        super.onCreateView(inflater, container, savedInstanceState)
+        memberImpl = requireActivity() as MemberActivity
+        mView = layoutInflater.inflate(ResUtils.getResId(requireActivity(), "yyxx_member_bind_phone", "layout"), container, false)
+        initView(mView)
+        return mView
+    }
+
+    private fun initView(view: View) {
+
+        imgUp = ResUtils.getResId(context, "yyxx_pack_up_white_img", "drawable")
+        imgDown = ResUtils.getResId(context, "yyxx_pack_down_white_img", "drawable")
+
+        ivReturn = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_return", "id"))
+        ivReturn.apply {
+            tag = ClickType.ACTION_RETURN
+            setOnClickListener(this@BindPhoneFragment)
+        }
+
+        eetPhone = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_phone", "id"))
+        eetPhone.editText.hint = ResUtils.getResString(requireActivity(), "yyxx_hint_forget_phone")
+
+        eetCaptcha = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_captcha", "id"))
+        eetCaptcha.editText.hint = ResUtils.getResString(requireActivity(), "yyxx_hint_bind_phone_captcha")
+
+        btnCaptCha = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_captcha", "id"))
+        btnCaptCha.apply {
+            tag = ClickType.ACTION_GET_CAPTCHA
+            setOnClickListener(this@BindPhoneFragment)
+        }
+
+        btnConfirm = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_confirm", "id"))
+        btnConfirm.apply {
+            tag = ClickType.ACTION_CONFIRM
+            setOnClickListener(this@BindPhoneFragment)
+        }
+
+        rlAreaList = view.findViewById(ResUtils.getResId(context, "yyxx_rl_area_list", "id"))
+        rlAreaList.visibility = View.GONE
+        llAreaList = view.findViewById(ResUtils.getResId(context, "yyxx_ll_area_list", "id"))
+        svAreaList = view.findViewById(ResUtils.getResId(context, "yyxx_sv_area_list", "id"))
+
+
+        tvArea = view.findViewById(ResUtils.getResId(context, "yyxx_tv_area", "id"))
+        ivArrow = view.findViewById(ResUtils.getResId(context, "yyxx_iv_arrow", "id"))
+        ivArrow.setOnClickListener {
+            changeAreaList()
+        }
+
+        autoFillAreaList(requireActivity())
+    }
+
+    private fun autoFillAreaList(context: Context) {
+        if (areaList.size == 0) {
+            //默认4个地区
+            areaList.add("86")
+            //香港
+            areaList.add("862")
+            //澳门
+            areaList.add("853")
+            //台湾
+            areaList.add("886")
+        }
+        initAreaList(context)
+    }
+
+    private fun initAreaList(context: Context) {
+        llAreaList.removeAllViews()
+        //单行高
+        var height = 100
+        tvArea.apply {
+            height = if (layoutParams != null) {
+                layoutParams!!.height
+            } else {
+                100
+            }
+        }
+        //ScrollView高度
+        var maxHeight = 0
+        areaList.apply {
+            maxHeight = if (size < 2) {
+                size * height
+            } else {
+                2 * height
+            }
+        }
+        //循环添加列
+        areaList.apply {
+            for (i in indices) {
+                val areaCode = this[i]
+                //添加线
+                val line = View(context)
+                line.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 2)
+                line.setBackgroundColor(Color.parseColor("#E6FFFFFF"))
+                llAreaList.apply {
+                    if (childCount > 0) {
+                        addView(line)
+                    }
+                }
+                //添加区号
+                val item = LayoutInflater.from(context).inflate(ResUtils.getResId(context, "yyxx_area_list_item", "layout"), null)
+                item?.apply {
+                    val tvAreaCode = findViewById<TextView>(ResUtils.getResId(context, "yyxx_tv_area", "id"))
+                    tvAreaCode.gravity = Gravity.CENTER
+                    tvAreaCode.text = areaCode
+                    code = areaCode
+                    setOnClickListener(OnItemClick(areaCode))
+                    layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height)
+                    llAreaList.addView(this, llAreaList.childCount)
+                }
+            }
+        }
+        svAreaList.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, maxHeight)
+    }
+
+
+    private fun changeAreaList() {
+        if (rlAreaList.visibility == View.GONE) {
+            ivArrow.setBackgroundResource(imgUp)
+            rlAreaList.visibility = View.VISIBLE
+        } else {
+            ivArrow.setBackgroundResource(imgDown)
+            rlAreaList.visibility = View.GONE
+        }
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        areaList.clear()
+        rlAreaList.visibility = View.GONE
+    }
+
+    override fun onClick(v: View?) {
+        v?.apply {
+            when (tag as Int) {
+                ClickType.ACTION_RETURN -> requireActivity().onBackPressed()
+            }
+        }
+    }
+
+    /**
+     * 账号列表item点击事件
+     */
+    private inner class OnItemClick(val areaCode: String) : View.OnClickListener {
+        override fun onClick(v: View?) {
+            tvArea.apply {
+                changeAreaList()
+                tvArea.text = areaCode
+            }
+        }
+    }
+}

+ 99 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/MainFragment.kt

@@ -0,0 +1,99 @@
+package cn.yyxx.eyuangame.core.impl.center.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.fragment.app.Fragment
+import cn.yyxx.eyuangame.core.entity.ClickType
+import cn.yyxx.eyuangame.core.entity.LoginType
+import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
+import cn.yyxx.eyuangame.core.impl.center.MemberActivity
+import cn.yyxx.eyuangame.core.impl.center.MemberFragmentTag
+import cn.yyxx.support.ResUtils
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/06/30
+ */
+class MainFragment : Fragment(), View.OnClickListener {
+
+    private lateinit var mView: View
+    private lateinit var memberImpl: MemberActivity
+
+    private lateinit var ivReturn: ImageView
+    private lateinit var clBindAccount: ConstraintLayout
+    private lateinit var clBindPhone: ConstraintLayout
+    private lateinit var clModifyPwd: ConstraintLayout
+
+    private lateinit var ivAccountIcon: ImageView
+    private lateinit var tvAccountTips: TextView
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        super.onCreateView(inflater, container, savedInstanceState)
+        memberImpl = requireActivity() as MemberActivity
+        mView = layoutInflater.inflate(ResUtils.getResId(requireActivity(), "yyxx_member_main", "layout"), container, false)
+        initView(mView)
+        return mView
+    }
+
+    private fun initView(view: View) {
+        ivReturn = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_return", "id"))
+        ivReturn.apply {
+            tag = ClickType.ACTION_RETURN
+            setOnClickListener(this@MainFragment)
+        }
+
+        clBindAccount = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_cl_bind_account", "id"))
+        clBindAccount.apply {
+            tag = ClickType.ACTION_BIND_ACCOUNT
+            setOnClickListener(this@MainFragment)
+        }
+        clBindPhone = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_cl_bind_phone", "id"))
+        clBindPhone.apply {
+            tag = ClickType.ACTION_BIND_PHONE
+            setOnClickListener(this@MainFragment)
+        }
+        clModifyPwd = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_cl_modify_pwd", "id"))
+        clModifyPwd.apply {
+            tag = ClickType.ACTION_MODIFY_PWD
+            setOnClickListener(this@MainFragment)
+        }
+
+        ivAccountIcon = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_bind_account_icon", "id"))
+        tvAccountTips = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_tv_bind_account_tips", "id"))
+        var img = 0
+        var tips = ""
+        when (SdkBackLoginInfo.instance.loginType) {
+            LoginType.TYPE_GUEST_LOGIN -> {
+                img = ResUtils.getResId(requireActivity(), "yyxx_guest_img", "drawable")
+                tips = ResUtils.getResString(requireActivity(), "yyxx_login_type_guest")
+            }
+            LoginType.TYPE_FACEBOOK_LOGIN -> {
+                img = ResUtils.getResId(requireActivity(), "yyxx_facebook_img", "drawable")
+                tips = ResUtils.getResString(requireActivity(), "yyxx_login_type_facebook")
+            }
+            LoginType.TYPE_GOOGLE_LOGIN -> {
+                img = ResUtils.getResId(requireActivity(), "yyxx_google_img", "drawable")
+                tips = ResUtils.getResString(requireActivity(), "yyxx_login_type_google")
+            }
+        }
+        ivAccountIcon.setBackgroundResource(img)
+        tvAccountTips.text = tips
+
+    }
+
+    override fun onClick(v: View?) {
+        v?.apply {
+            when (tag as Int) {
+                ClickType.ACTION_RETURN -> requireActivity().onBackPressed()
+                ClickType.ACTION_BIND_ACCOUNT -> memberImpl.switchFragment(MemberFragmentTag.BIND_ACCOUNT)
+                ClickType.ACTION_BIND_PHONE -> memberImpl.switchFragment(MemberFragmentTag.BIND_PHONE)
+                ClickType.ACTION_MODIFY_PWD -> memberImpl.switchFragment(MemberFragmentTag.MODIFY_PWD)
+            }
+        }
+    }
+}

+ 114 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/ModifyPwdFragment.kt

@@ -0,0 +1,114 @@
+package cn.yyxx.eyuangame.core.impl.center.fragment
+
+import android.os.Bundle
+import android.text.InputType
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.ImageView
+import androidx.fragment.app.Fragment
+import cn.yyxx.eyuangame.core.entity.ClickType
+import cn.yyxx.eyuangame.core.impl.center.MemberActivity
+import cn.yyxx.eyuangame.core.ui.EventEditText
+import cn.yyxx.support.ResUtils
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/06/30
+ */
+class ModifyPwdFragment : Fragment(), View.OnClickListener {
+
+    private lateinit var mView: View
+    private lateinit var memberImpl: MemberActivity
+
+    private lateinit var ivReturn: ImageView
+    private lateinit var eetOldPwd: EventEditText
+    private lateinit var eetNewPwd: EventEditText
+    private lateinit var btnConfirm: Button
+
+    private var imgShow = 0
+    private var imgHide = 0
+    private var isShowOldText = false
+    private var isShowNewText = false
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        super.onCreateView(inflater, container, savedInstanceState)
+        memberImpl = requireActivity() as MemberActivity
+        mView = layoutInflater.inflate(ResUtils.getResId(requireActivity(), "yyxx_member_modify_pwd", "layout"), container, false)
+        initView(mView)
+        return mView
+    }
+
+    private fun initView(view: View) {
+
+        imgShow = ResUtils.getResId(requireActivity(), "yyxx_show_img", "drawable")
+        imgHide = ResUtils.getResId(requireActivity(), "yyxx_hide_img", "drawable")
+
+        ivReturn = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_return", "id"))
+        ivReturn.apply {
+            tag = ClickType.ACTION_RETURN
+            setOnClickListener(this@ModifyPwdFragment)
+        }
+
+        eetOldPwd = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_old_pwd", "id"))
+        eetOldPwd.apply {
+            editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_pwd_img", "drawable"))
+            leftImageView.visibility = View.VISIBLE
+            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_modify_pwd_old", "string"))
+            rightImageView.setBackgroundResource(imgShow)
+            rightImageView.visibility = View.VISIBLE
+            rightImageView.setOnClickListener {
+                if (!isShowOldText) {
+                    isShowOldText = true
+                    rightImageView.setBackgroundResource(imgHide)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
+                } else {
+                    isShowOldText = false
+                    rightImageView.setBackgroundResource(imgShow)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+                }
+                editText.setSelection(editText.length())
+            }
+        }
+
+
+        eetNewPwd = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_new_pwd", "id"))
+        eetNewPwd.apply {
+            editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_pwd_img", "drawable"))
+            leftImageView.visibility = View.VISIBLE
+            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_modify_pwd_new", "string"))
+            rightImageView.setBackgroundResource(imgShow)
+            rightImageView.visibility = View.VISIBLE
+            rightImageView.setOnClickListener {
+                if (!isShowNewText) {
+                    isShowNewText = true
+                    rightImageView.setBackgroundResource(imgHide)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
+                } else {
+                    isShowNewText = false
+                    rightImageView.setBackgroundResource(imgShow)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+                }
+                editText.setSelection(editText.length())
+            }
+        }
+
+        btnConfirm = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_confirm", "id"))
+        btnConfirm.apply {
+            tag = ClickType.ACTION_CONFIRM
+            setOnClickListener(this@ModifyPwdFragment)
+        }
+
+    }
+
+    override fun onClick(v: View?) {
+        v?.apply {
+            when (tag as Int) {
+                ClickType.ACTION_RETURN -> requireActivity().onBackPressed()
+            }
+        }
+    }
+}

+ 6 - 2
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/floatball/FloatCenterService.kt

@@ -9,6 +9,7 @@ import android.widget.ImageView
 import cn.yyxx.eyuangame.base.utils.Logger
 import cn.yyxx.eyuangame.core.entity.FloatFeature
 import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
+import cn.yyxx.eyuangame.core.impl.center.MemberActivity
 import cn.yyxx.eyuangame.core.ui.floatview.FloatingBall
 import cn.yyxx.eyuangame.core.ui.floatview.FloatingBallMenu
 import cn.yyxx.support.ResUtils
@@ -41,6 +42,9 @@ class FloatCenterService : Service() {
 
         override fun onMenuItemClick(item: FloatingBallMenu.FloatingBallMenuItem, pos: Int) {
             Logger.d("onMenuItemClick , ${item.type.name}")
+            when (item.type) {
+                FloatFeature.FEATURE_MEMBER -> MemberActivity.start(mActivity!!)
+            }
         }
 
         override fun onExpandMenu(hasRedDot: Boolean) {
@@ -61,7 +65,7 @@ class FloatCenterService : Service() {
         this.mActivity = activity
     }
 
-    fun show() {
+    fun attach() {
         if (mActivity == null) {
             return
         }
@@ -72,7 +76,7 @@ class FloatCenterService : Service() {
         floatingBall?.attach()
     }
 
-    fun hide() {
+    fun detach() {
         floatingBall?.detach()
     }
 

+ 5 - 5
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/floatball/FloatCenterServiceManager.kt

@@ -42,20 +42,20 @@ class FloatCenterServiceManager private constructor() {
         }
     }
 
-    fun show() {
+    fun attach() {
         if (mService == null) {
             Logger.e("浮标服务未初始化或发生异常")
             return
         }
         if (!TextUtils.isEmpty(SdkBackLoginInfo.instance.userId)) {
-            mService?.show()
+            mService?.attach()
         } else {
-            hide()
+            detach()
         }
     }
 
-    fun hide() {
-        mService?.hide()
+    fun detach() {
+        mService?.detach()
     }
 
     fun release() {

+ 13 - 9
library_core/src/main/java/cn/yyxx/eyuangame/core/network/Host.kt

@@ -19,15 +19,19 @@ object Host {
      */
     var IP_MODEL = 3
 
-    var BASIC_ROUTE_INIT_SDK = "activate"
-    var BASIC_ROUTE_LOGIN = "member_login"
-    var BASIC_ROUTE_THIRD_PART_LOGIN = "third_plat_login"
-    var BASIC_ROUTE_REGISTER = "member_register"
-    var BASIC_ROUTE_FORGET_PWD = ""
-    var BASIC_ROUTE_CREATE_ORDER = ""
-    var BASIC_ROUTE_NOTIFY_ORDER = ""
-    var BASIC_ROUTE_NOTIFY_REWARD = ""
-    var BASIC_ROUTE_SUBMIT_ROLE_INFO = ""
+    const val BASIC_ROUTE_INIT_SDK = "activate"
+    const val BASIC_ROUTE_LOGIN = "member_login"
+    const val BASIC_ROUTE_THIRD_PART_LOGIN = "third_plat_login"
+    const val BASIC_ROUTE_REGISTER = "member_register"
+    const val BASIC_ROUTE_BIND_ACCOUNT = "bind_member"
+    const val BASIC_ROUTE_BIND_PHONE = "bind_phone"
+    const val BASIC_ROUTE_GET_CAPTCHA = "phone_captcha"
+    const val BASIC_ROUTE_FORGET_PWD = "forget_pwd"
+    const val BASIC_ROUTE_MODIFY_PWD = "modify_pwd"
+    const val BASIC_ROUTE_CREATE_ORDER = ""
+    const val BASIC_ROUTE_NOTIFY_ORDER = ""
+    const val BASIC_ROUTE_NOTIFY_REWARD = ""
+    const val BASIC_ROUTE_SUBMIT_ROLE_INFO = ""
 
 
     fun initHostModel(context: Context) {

+ 41 - 10
library_core/src/main/java/cn/yyxx/eyuangame/core/network/SdkRequest.kt

@@ -29,7 +29,7 @@ class SdkRequest {
         } catch (e: JSONException) {
             e.printStackTrace()
         }
-        VolleyRequest.post(context, Host.HOST, jsonObject, callback)
+        VolleyRequest.post(context, jsonObject, callback)
     }
 
     fun userLoginVerify(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
@@ -42,7 +42,7 @@ class SdkRequest {
         } catch (e: JSONException) {
             e.printStackTrace()
         }
-        VolleyRequest.post(context, Host.HOST, jsonObject, callback)
+        VolleyRequest.post(context, jsonObject, callback)
     }
 
     fun registerUser(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
@@ -51,25 +51,56 @@ class SdkRequest {
         } catch (e: JSONException) {
             e.printStackTrace()
         }
-        VolleyRequest.post(context, Host.HOST, jsonObject, callback)
+        VolleyRequest.post(context, jsonObject, callback)
     }
 
-    fun forgetUserPwd(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
-
-    }
-
-    fun modifyUserPwd(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
 
+    fun bindAccount(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
+        try {
+            jsonObject.put("route_path", Host.BASIC_ROUTE_BIND_ACCOUNT)
+        } catch (e: JSONException) {
+            e.printStackTrace()
+        }
+        VolleyRequest.post(context, jsonObject, callback)
     }
 
     fun bindPhone(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
+        try {
+            jsonObject.put("route_path", Host.BASIC_ROUTE_BIND_PHONE)
+        } catch (e: JSONException) {
+            e.printStackTrace()
+        }
+        VolleyRequest.post(context, jsonObject, callback)
+    }
 
+    fun getCaptcha(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
+        try {
+            jsonObject.put("route_path", Host.BASIC_ROUTE_GET_CAPTCHA)
+        } catch (e: JSONException) {
+            e.printStackTrace()
+        }
+        VolleyRequest.post(context, jsonObject, callback)
     }
 
-    fun bindAccount(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
+    fun forgetUserPwd(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
+        try {
+            jsonObject.put("route_path", Host.BASIC_ROUTE_FORGET_PWD)
+        } catch (e: JSONException) {
+            e.printStackTrace()
+        }
+        VolleyRequest.post(context, jsonObject, callback)
+    }
 
+    fun modifyUserPwd(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
+        try {
+            jsonObject.put("route_path", Host.BASIC_ROUTE_MODIFY_PWD)
+        } catch (e: JSONException) {
+            e.printStackTrace()
+        }
+        VolleyRequest.post(context, jsonObject, callback)
     }
 
+
     fun createOrder(context: Context, chargeInfo: SdkChargeInfo, callback: IRequestCallback) {
         val jsonObject = JSONObject()
         try {
@@ -90,7 +121,7 @@ class SdkRequest {
         } catch (e: JSONException) {
             e.printStackTrace()
         }
-        VolleyRequest.post(context, Host.HOST, jsonObject, callback)
+        VolleyRequest.post(context, jsonObject, callback)
     }
 
 

+ 2 - 2
library_core/src/main/java/cn/yyxx/eyuangame/core/network/VolleyRequest.kt

@@ -26,7 +26,7 @@ object VolleyRequest {
 
     private const val MAX_TIMEOUT = 10 * 1000
 
-    fun post(context: Context, host: String, jsonObject: JSONObject, callback: IRequestCallback) {
+    fun post(context: Context, jsonObject: JSONObject, callback: IRequestCallback) {
         try {
             val time = System.currentTimeMillis().toString()
             val randomKey = time + StrUtils.getRandomString(16)
@@ -58,7 +58,7 @@ object VolleyRequest {
 //            val base64P = Base64Utils.encode(tmp)
 //            obj.put("p", base64P)
 
-            val request = object : JsonObjectRequest(Method.POST, host, obj, Response.Listener {
+            val request = object : JsonObjectRequest(Method.POST, Host.HOST, obj, Response.Listener {
                 val resultInfo = ResultInfo()
                 resultInfo.code = -1
                 resultInfo.msg = "接口请求异常"

+ 1 - 1
library_core/src/main/java/cn/yyxx/eyuangame/core/ui/dialog/ForgetPwdDialog.kt

@@ -14,7 +14,7 @@ import cn.yyxx.support.ResUtils
  * @author #Suyghur.
  * Created on 2021/06/23
  */
-class ForgetPwdDialog(context: Context, private val isLandscape: Boolean, val areaList: MutableList<String>) : Dialog(context) {
+class ForgetPwdDialog(context: Context, private val isLandscape: Boolean, private val areaList: MutableList<String>) : Dialog(context) {
 
     lateinit var ivReturn: ImageView
     lateinit var eetAccount: EventEditText

+ 18 - 16
library_core/src/main/java/cn/yyxx/eyuangame/core/ui/floatview/FloatingBall.kt

@@ -61,7 +61,9 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
 
     private val timerHandler = object : Handler(Looper.getMainLooper()) {
         override fun handleMessage(msg: Message) {
-
+            when (msg.what) {
+                1000 -> Logger.d("logo折半")
+            }
         }
     }
 
@@ -94,15 +96,15 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
 
     private fun createView() {
         rootLinearLayout = LinearLayout(activity)
-        rootLinearLayout.layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 40f), DensityUtils.dip2px(activity, 40f))
+        rootLinearLayout.layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 45f), DensityUtils.dip2px(activity, 50f))
 
         frameLayout = FrameLayout(activity)
         frameLayout.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
 
         ballView = ImageView(activity)
         ballView.apply {
-            layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 40f), DensityUtils.dip2px(activity, 40f))
-            invokeUpdateBallView()
+            layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 45f), DensityUtils.dip2px(activity, 45f))
+            callback.onUpdateBallView(ballView, isLeftLocation, false)
             scaleType = ImageView.ScaleType.FIT_XY
             //TODO onClickListener ?
             setOnTouchListener(this@FloatingBall)
@@ -130,8 +132,8 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
         menu = PopupWindow(activity)
         menu.apply {
             contentView = ballMenu.contentView
-            width = DensityUtils.dip2px(activity, 40f + mSize * 40f)
-            height = DensityUtils.dip2px(activity, 40f)
+            width = DensityUtils.dip2px(activity, 45f + mSize * 45f)
+            height = DensityUtils.dip2px(activity, 45f)
             isFocusable = true
             setBackgroundDrawable(ColorDrawable())
             isOutsideTouchable = true
@@ -149,11 +151,10 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
     fun dismissMenu() {
         hasShowContent = false
         menu.dismiss()
-        invokeUpdateBallView()
+        callback.onUpdateBallView(ballView, isLeftLocation, false)
     }
 
     private fun invokeMenuShowOrDismiss() {
-        Logger.d("invokeMenuShowOrDismiss")
         if (hasShowContent) {
             menu.dismiss()
             hasShowContent = false
@@ -179,14 +180,10 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
         }
     }
 
-    private fun invokeUpdateBallView() {
-        callback.onUpdateBallView(ballView, isLeftLocation, false)
-    }
-
     private fun invokeDisplayTimerWork() {
         displayWorker?.invokeAtFixedRate({
             timerHandler.sendEmptyMessage(1000)
-        }, 10, 3, TimeUnit.SECONDS)
+        }, 30, 30, TimeUnit.SECONDS)
     }
 
 
@@ -198,6 +195,9 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
 
     fun detach() {
         if (visibility == View.VISIBLE) {
+            if (hasShowContent) {
+                dismissMenu()
+            }
             visibility = View.GONE
         }
     }
@@ -207,8 +207,10 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
             cancel()
             displayWorker = null
         }
-
-        wm.removeView(rootLinearLayout)
+        frameLayout.removeAllViews()
+        rootLinearLayout.removeAllViews()
+        removeAllViews()
+        wm.removeView(this)
     }
 
     /**
@@ -307,7 +309,7 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
                 if (isMove) {
                     invokeDisplayTimerWork()
                 } else {
-                    invokeUpdateBallView()
+                    callback.onUpdateBallView(ballView, isLeftLocation, false)
                 }
             }
         }

+ 4 - 2
library_core/src/main/java/cn/yyxx/eyuangame/core/ui/floatview/FloatingBallMenu.kt

@@ -35,8 +35,10 @@ class FloatingBallMenu(val context: Context, private val callback: FloatingBallM
 
         menuView = contentView.findViewById(ResUtils.getResId(context, "yyxx_gv_menu", "id"))
         //重新设置menuView宽高
-        val menuWidth = DensityUtils.dip2px(context, callback.onInitMenuData().size * 40f)
-        menuView.layoutParams = LinearLayout.LayoutParams(menuWidth, LinearLayout.LayoutParams.WRAP_CONTENT)
+        val menuWidth = DensityUtils.dip2px(context, callback.onInitMenuData().size * 45f)
+        val menuParams = LinearLayout.LayoutParams(menuWidth, LinearLayout.LayoutParams.WRAP_CONTENT)
+        menuParams.marginEnd = DensityUtils.dip2px(context, 5f)
+        menuView.layoutParams = menuParams
     }
 
     private fun initData() {

+ 5 - 0
library_core/src/main/res/anim/yyxx_fragment_popup_anim.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<translate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:duration="300"
+    android:fromXDelta="0"
+    android:toXDelta="100%p" />

+ 5 - 0
library_core/src/main/res/anim/yyxx_fragment_push_anim.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<translate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:duration="300"
+    android:fromXDelta="100%p"
+    android:toXDelta="0" />

BIN
library_core/src/main/res/drawable-xhdpi/yyxx_float_logo_img.png


BIN
library_core/src/main/res/drawable-xhdpi/yyxx_modify_pwd_img.png


BIN
library_core/src/main/res/drawable-xhdpi/yyxx_phone_img.png


+ 9 - 0
library_core/src/main/res/drawable/yyxx_green_blue_panel_content_bg.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners
+        android:bottomLeftRadius="8dp"
+        android:bottomRightRadius="8dp" />
+    <solid android:color="@color/yyxx_color_green_blue" />
+</shape>
+
+

+ 9 - 0
library_core/src/main/res/drawable/yyxx_white70_panel_content_bg.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners
+        android:bottomLeftRadius="8dp"
+        android:bottomRightRadius="8dp" />
+    <solid android:color="@color/yyxx_color_white_50" />
+</shape>
+
+

+ 0 - 0
library_core/src/main/res/drawable/yyxx_login_panel_bg.xml → library_core/src/main/res/drawable/yyxx_white_panel_bg.xml


+ 9 - 0
library_core/src/main/res/drawable/yyxx_white_panel_title_bg.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners
+        android:topLeftRadius="8dp"
+        android:topRightRadius="8dp" />
+    <solid android:color="@color/yyxx_color_white_90" />
+</shape>
+
+

+ 2 - 2
library_core/src/main/res/layout/yyxx_agreement_dialog.xml

@@ -3,7 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="@drawable/yyxx_login_panel_bg">
+    android:background="@drawable/yyxx_white_panel_bg">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_title_container"
@@ -16,7 +16,7 @@
         <ImageView
             android:id="@+id/yyxx_iv_return"
             android:layout_width="60dp"
-            android:layout_height="30dp"
+            android:layout_height="25dp"
             android:background="@drawable/yyxx_return_img"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

+ 1 - 1
library_core/src/main/res/layout/yyxx_auto_login_dialog.xml

@@ -3,7 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:background="@drawable/yyxx_login_panel_bg"
+    android:background="@drawable/yyxx_white_panel_bg"
     android:padding="20dp">
 
     <LinearLayout

+ 1 - 1
library_core/src/main/res/layout/yyxx_choose_login_dialog.xml

@@ -4,7 +4,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_gravity="center"
-    android:background="@drawable/yyxx_login_panel_bg"
+    android:background="@drawable/yyxx_white_panel_bg"
     android:padding="30dp">
 
     <ImageView

+ 3 - 3
library_core/src/main/res/layout/yyxx_floating_ball_item.xml

@@ -8,8 +8,8 @@
 
     <ImageView
         android:id="@+id/yyxx_iv_icon"
-        android:layout_width="18dp"
-        android:layout_height="18dp"
+        android:layout_width="20dp"
+        android:layout_height="20dp"
         android:background="@drawable/yyxx_float_logo_img" />
 
     <TextView
@@ -19,6 +19,6 @@
         android:layout_marginTop="2dp"
         android:text="feature"
         android:textColor="@color/yyxx_color_green_blue"
-        android:textSize="8sp" />
+        android:textSize="10sp" />
 
 </LinearLayout>

+ 2 - 2
library_core/src/main/res/layout/yyxx_forget_pwd_dialog.xml

@@ -6,7 +6,7 @@
     android:layout_gravity="center"
     android:layout_marginStart="20dp"
     android:layout_marginEnd="20dp"
-    android:background="@drawable/yyxx_login_panel_bg">
+    android:background="@drawable/yyxx_white_panel_bg">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_title_container"
@@ -19,7 +19,7 @@
         <ImageView
             android:id="@+id/yyxx_iv_return"
             android:layout_width="60dp"
-            android:layout_height="30dp"
+            android:layout_height="25dp"
             android:background="@drawable/yyxx_return_img"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

+ 1 - 1
library_core/src/main/res/layout/yyxx_login.xml

@@ -13,7 +13,7 @@
         android:layout_height="wrap_content"
         android:layout_marginLeft="30dp"
         android:layout_marginRight="30dp"
-        android:background="@drawable/yyxx_login_panel_bg"
+        android:background="@drawable/yyxx_white_panel_bg"
         android:visibility="visible"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"

+ 19 - 0
library_core/src/main/res/layout/yyxx_member.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/yyxx_member_center_container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/yyxx_color_gray_30">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_cl_member_center"
+        android:layout_width="320dp"
+        android:layout_height="240dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 99 - 0
library_core/src/main/res/layout/yyxx_member_bind_account.xml

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_title_container"
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        android:background="@drawable/yyxx_white_panel_title_bg"
+        app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/yyxx_iv_return"
+            android:layout_width="60dp"
+            android:layout_height="25dp"
+            android:background="@drawable/yyxx_return_img"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/yyxx_tv_bind_account"
+            android:textColor="@color/yyxx_color_green_blue"
+            android:textSize="20sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/yyxx_white70_panel_content_bg"
+        android:padding="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/yyxx_title_container">
+
+        <cn.yyxx.eyuangame.core.ui.EventEditText
+            android:id="@+id/yyxx_eet_account"
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:background="@drawable/yyxx_et_frame_selector_bg"
+            app:layout_constraintBottom_toTopOf="@+id/yyxx_eet_pwd"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <cn.yyxx.eyuangame.core.ui.EventEditText
+            android:id="@+id/yyxx_eet_pwd"
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_marginTop="5dp"
+            android:background="@drawable/yyxx_et_frame_selector_bg"
+            app:layout_constraintBottom_toTopOf="@id/yyxx_tv_tips"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_account" />
+
+
+        <TextView
+            android:id="@+id/yyxx_tv_tips"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:text="@string/yyxx_tv_bind_account_tips"
+            android:textColor="@color/yyxx_color_red"
+            android:textSize="10sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toTopOf="@id/yyxx_btn_confirm"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_pwd" />
+
+        <Button
+            android:id="@+id/yyxx_btn_confirm"
+            style="?android:attr/borderlessButtonStyle"
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_marginTop="10dp"
+            android:background="@drawable/yyxx_btn_green_blue_bg"
+            android:text="@string/yyxx_tv_confirm"
+            android:textColor="@color/yyxx_color_white"
+            android:textSize="16sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/yyxx_tv_tips" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 197 - 0
library_core/src/main/res/layout/yyxx_member_bind_phone.xml

@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_title_container"
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        android:background="@drawable/yyxx_white_panel_title_bg"
+        app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/yyxx_iv_return"
+            android:layout_width="60dp"
+            android:layout_height="25dp"
+            android:background="@drawable/yyxx_return_img"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/yyxx_tv_bind_phone"
+            android:textColor="@color/yyxx_color_green_blue"
+            android:textSize="20sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/yyxx_white70_panel_content_bg"
+        android:padding="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/yyxx_title_container">
+
+        <LinearLayout
+            android:id="@+id/yyxx_ll_group1"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toTopOf="@id/yyxx_ll_group2"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/yyxx_cl_area"
+                android:layout_width="wrap_content"
+                android:layout_height="35dp">
+
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:id="@+id/yyxx_choose_group"
+                    android:layout_width="60dp"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/yyxx_area_list_left_bg"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toStartOf="@id/yyxx_arrow_group"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent">
+
+                    <TextView
+                        android:id="@+id/yyxx_tv_area"
+                        android:layout_width="wrap_content"
+                        android:layout_height="35dp"
+                        android:gravity="center_vertical"
+                        android:text="@string/yyxx_tv_area_code"
+                        android:textColor="@color/yyxx_color_white"
+                        android:textSize="12sp"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent" />
+                </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:id="@+id/yyxx_arrow_group"
+                    android:layout_width="wrap_content"
+                    android:layout_height="35dp"
+                    android:background="@drawable/yyxx_area_list_right_bg"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toEndOf="@id/yyxx_choose_group"
+                    app:layout_constraintTop_toTopOf="parent">
+
+                    <ImageView
+                        android:id="@+id/yyxx_iv_arrow"
+                        android:layout_width="14dp"
+                        android:layout_height="14dp"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginLeft="5dp"
+                        android:layout_marginRight="5dp"
+                        android:background="@drawable/yyxx_pack_down_white_img"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent" />
+                </androidx.constraintlayout.widget.ConstraintLayout>
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <cn.yyxx.eyuangame.core.ui.EventEditText
+                android:id="@+id/yyxx_eet_phone"
+                android:layout_width="0dp"
+                android:layout_height="35dp"
+                android:layout_marginLeft="10dp"
+                android:layout_weight="2" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/yyxx_ll_group2"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:orientation="horizontal"
+            app:layout_constraintBottom_toTopOf="@id/yyxx_btn_confirm"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/yyxx_ll_group1">
+
+            <cn.yyxx.eyuangame.core.ui.EventEditText
+                android:id="@+id/yyxx_eet_captcha"
+                android:layout_width="0dp"
+                android:layout_height="35dp"
+                android:layout_weight="2"
+                android:background="@drawable/yyxx_et_frame_selector_bg" />
+
+            <Button
+                android:id="@+id/yyxx_btn_captcha"
+                style="?android:attr/borderlessButtonStyle"
+                android:layout_width="0dp"
+                android:layout_height="35dp"
+                android:layout_marginStart="10dp"
+                android:layout_weight="1"
+                android:background="@drawable/yyxx_btn_green_blue_bg"
+                android:text="@string/yyxx_tv_get_captcha"
+                android:textColor="@color/yyxx_color_white"
+                android:textSize="12sp" />
+        </LinearLayout>
+
+        <RelativeLayout
+            android:id="@+id/yyxx_rl_area_list"
+            android:layout_width="60dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="30dp"
+            android:background="@drawable/yyxx_area_list_bg"
+            android:paddingTop="3.5dp"
+            android:paddingBottom="3.5dp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="@id/yyxx_ll_group1">
+
+            <ScrollView
+                android:id="@+id/yyxx_sv_area_list"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_alignParentTop="true"
+                android:scrollbars="none"
+                android:visibility="visible">
+
+                <LinearLayout
+                    android:id="@+id/yyxx_ll_area_list"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical" />
+            </ScrollView>
+        </RelativeLayout>
+
+        <Button
+            android:id="@+id/yyxx_btn_confirm"
+            style="?android:attr/borderlessButtonStyle"
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_marginTop="20dp"
+            android:background="@drawable/yyxx_btn_green_blue_bg"
+            android:text="@string/yyxx_tv_confirm"
+            android:textColor="@color/yyxx_color_white"
+            android:textSize="16sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/yyxx_ll_group2" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 182 - 0
library_core/src/main/res/layout/yyxx_member_main.xml

@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_title_container"
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        android:background="@drawable/yyxx_white_panel_title_bg"
+        app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/yyxx_iv_return"
+            android:layout_width="60dp"
+            android:layout_height="25dp"
+            android:background="@drawable/yyxx_return_img"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/yyxx_tv_member_center_title"
+            android:textColor="@color/yyxx_color_green_blue"
+            android:textSize="20sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="200dp"
+        android:background="@drawable/yyxx_white70_panel_content_bg"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/yyxx_title_container">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/yyxx_cl_bind_account"
+            android:layout_width="80dp"
+            android:layout_height="100dp"
+            android:layout_marginStart="20dp"
+            android:layout_marginTop="20dp"
+            android:layout_marginEnd="10sp"
+            android:layout_marginBottom="20dp"
+
+            android:background="@drawable/yyxx_white_panel_bg"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/yyxx_cl_bind_phone"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/yyxx_iv_bind_account_icon"
+                android:layout_width="40dp"
+                android:layout_height="40dp"
+                android:layout_marginTop="10dp"
+                android:background="@drawable/yyxx_guest_img"
+                app:layout_constraintBottom_toTopOf="@id/yyxx_tv_bind_account_tips"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <TextView
+                android:id="@+id/yyxx_tv_bind_account_tips"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/yyxx_login_type_guest"
+                android:textColor="@color/yyxx_color_black"
+                android:textSize="10sp"
+                app:layout_constraintBottom_toTopOf="@id/yyxx_tv_bind_account_desc"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/yyxx_iv_bind_account_icon" />
+
+            <TextView
+                android:id="@+id/yyxx_tv_bind_account_desc"
+                android:layout_width="match_parent"
+                android:layout_height="20dp"
+                android:background="@drawable/yyxx_green_blue_panel_content_bg"
+                android:gravity="center"
+                android:text="@string/yyxx_tv_bind_account"
+                android:textColor="@color/yyxx_color_white"
+                android:textSize="10sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/yyxx_cl_bind_phone"
+            android:layout_width="80dp"
+            android:layout_height="100dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginTop="20dp"
+            android:layout_marginEnd="10dp"
+            android:layout_marginBottom="20dp"
+            android:background="@drawable/yyxx_white_panel_bg"
+            android:visibility="visible"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/yyxx_cl_modify_pwd"
+            app:layout_constraintStart_toEndOf="@id/yyxx_cl_bind_account"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/yyxx_iv_bind_phone_icon"
+                android:layout_width="40dp"
+                android:layout_height="40dp"
+                android:layout_marginTop="15dp"
+                android:background="@drawable/yyxx_phone_img"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+
+            <TextView
+                android:id="@+id/yyxx_tv_bind_phone_desc"
+                android:layout_width="match_parent"
+                android:layout_height="20dp"
+                android:background="@drawable/yyxx_green_blue_panel_content_bg"
+                android:gravity="center"
+                android:text="@string/yyxx_tv_bind_phone"
+                android:textColor="@color/yyxx_color_white"
+                android:textSize="10sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/yyxx_cl_modify_pwd"
+            android:layout_width="80dp"
+            android:layout_height="100dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginTop="20dp"
+            android:layout_marginEnd="20dp"
+            android:layout_marginBottom="20dp"
+            android:background="@drawable/yyxx_white_panel_bg"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@id/yyxx_cl_bind_phone"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <ImageView
+                android:id="@+id/yyxx_iv_modify_pwd_icon"
+                android:layout_width="40dp"
+                android:layout_height="40dp"
+                android:layout_marginTop="15dp"
+                android:background="@drawable/yyxx_modify_pwd_img"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+
+            <TextView
+                android:id="@+id/yyxx_tv_modify_pwd_desc"
+                android:layout_width="match_parent"
+                android:layout_height="20dp"
+                android:background="@drawable/yyxx_green_blue_panel_content_bg"
+                android:gravity="center"
+                android:text="@string/yyxx_tv_modify_pwd"
+                android:textColor="@color/yyxx_color_white"
+                android:textSize="10sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 86 - 0
library_core/src/main/res/layout/yyxx_member_modify_pwd.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_title_container"
+        android:layout_width="0dp"
+        android:layout_height="40dp"
+        android:background="@drawable/yyxx_white_panel_title_bg"
+        app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/yyxx_iv_return"
+            android:layout_width="60dp"
+            android:layout_height="25dp"
+            android:background="@drawable/yyxx_return_img"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/yyxx_tv_modify_pwd"
+            android:textColor="@color/yyxx_color_green_blue"
+            android:textSize="20sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/yyxx_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/yyxx_white70_panel_content_bg"
+        android:padding="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/yyxx_title_container">
+
+        <cn.yyxx.eyuangame.core.ui.EventEditText
+            android:id="@+id/yyxx_eet_old_pwd"
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:background="@drawable/yyxx_et_frame_selector_bg"
+            app:layout_constraintBottom_toTopOf="@+id/yyxx_eet_new_pwd"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <cn.yyxx.eyuangame.core.ui.EventEditText
+            android:id="@+id/yyxx_eet_new_pwd"
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_marginTop="10dp"
+            android:background="@drawable/yyxx_et_frame_selector_bg"
+            app:layout_constraintBottom_toTopOf="@id/yyxx_btn_confirm"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_old_pwd" />
+
+        <Button
+            android:id="@+id/yyxx_btn_confirm"
+            style="?android:attr/borderlessButtonStyle"
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_marginTop="10dp"
+            android:background="@drawable/yyxx_btn_green_blue_bg"
+            android:text="@string/yyxx_tv_confirm"
+            android:textColor="@color/yyxx_color_white"
+            android:textSize="16sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_new_pwd" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 1
library_core/src/main/res/layout/yyxx_tips_dialog.xml

@@ -5,7 +5,7 @@
     android:layout_height="wrap_content"
     android:layout_marginLeft="10dp"
     android:layout_marginRight="10dp"
-    android:background="@drawable/yyxx_login_panel_bg"
+    android:background="@drawable/yyxx_white_panel_bg"
     android:gravity="center">
 
     <TextView

+ 1 - 0
library_core/src/main/res/values/yyxx_colors.xml

@@ -4,6 +4,7 @@
     <color name="yyxx_color_white">#FFFFFF</color>
     <color name="yyxx_color_white_90">#E6FFFFFF</color>
     <color name="yyxx_color_white_70">#B3FFFFFF</color>
+    <color name="yyxx_color_white_50">#EDEDED</color>
     <color name="yyxx_color_red">#FF4C2B</color>
     <color name="yyxx_color_orange">#FF912A</color>
     <color name="yyxx_color_orange_95">#F2FF912A</color>

+ 13 - 2
library_core/src/main/res/values/yyxx_strings.xml

@@ -6,8 +6,8 @@
         <item>註冊</item>
     </string-array>
 
-    <string name="yyxx_login_type_google">Sign in with Google</string>
-    <string name="yyxx_login_type_facebook">Facebook</string>
+    <string name="yyxx_login_type_google">Google登入</string>
+    <string name="yyxx_login_type_facebook">Facebook登入</string>
     <string name="yyxx_login_type_account">帳號登入</string>
     <string name="yyxx_login_type_guest">快速登入</string>
 
@@ -21,12 +21,18 @@
     <string name="yyxx_tv_confirm">確認</string>
     <string name="yyxx_tv_switch">切換帳號</string>
     <string name="yyxx_tv_area_code">區號</string>
+    <string name="yyxx_tv_bind_account">帳號綁定</string>
+    <string name="yyxx_tv_bind_phone">手機綁定</string>
+    <string name="yyxx_tv_modify_pwd">修改密碼</string>
     <string name="yyxx_tv_agreement">我已閲讀並同意《會員條款及管理規章》</string>
     <string name="yyxx_tv_agreement_title">會員條款及管理規章</string>
+    <string name="yyxx_tv_member_center_title">會員中心</string>
     <string name="yyxx_tv_forget_pwd_title">忘記密碼</string>
     <string name="yyxx_tv_exit_content">您確認立即退出遊戲嗎?</string>
     <string name="yyxx_tv_exit_left">下次再見</string>
     <string name="yyxx_tv_exit_right">再玩一下</string>
+    <string name="yyxx_tv_bind_account_tips">注:此處帳號為新建帳號,請不要輸入已經註冊過的帳號</string>
+    <string name="yyxx_tv_get_captcha">獲取驗證碼</string>
 
     <string name="yyxx_tv_float_member_desc">會員</string>
     <string name="yyxx_tv_float_gif_desc">禮包</string>
@@ -46,6 +52,11 @@
     <string name="yyxx_hint_register_pwd">6~18字符,僅允許字母和數字</string>
     <string name="yyxx_hint_forget_account">請輸入您的帳號</string>
     <string name="yyxx_hint_forget_phone">請輸入您的手機門號</string>
+    <string name="yyxx_hint_bind_account_uname">請創建您的帳號</string>
+    <string name="yyxx_hint_bind_account_pwd">請設定您的密碼</string>
+    <string name="yyxx_hint_bind_phone_captcha">請輸入驗證碼</string>
+    <string name="yyxx_hint_modify_pwd_old">請輸入您的舊密碼</string>
+    <string name="yyxx_hint_modify_pwd_new">請輸入您的新密碼</string>
 
     <string name="yyxx_tips_account_format_error">您輸入的帳號格式有誤,請重新輸入</string>
     <string name="yyxx_tips_pwd_format_error">您輸入的帳號格式有誤,請重新輸入</string>

BIN
zkeystore/shzd_yyxx.keystore