Explorar o código

feat: 登录注册

DoggyZhang hai 4 meses
pai
achega
501bad061d
Modificáronse 76 ficheiros con 1174 adicións e 303 borrados
  1. 2 2
      app/src/main/java/com/adealink/weparty/MainActivity.kt
  2. 7 0
      app/src/main/java/com/adealink/weparty/aab/IService.kt
  3. 28 4
      app/src/main/java/com/adealink/weparty/commonui/widget/CommonButton.kt
  4. 7 0
      app/src/main/java/com/adealink/weparty/module/account/AccountModule.kt
  5. 1 1
      app/src/main/java/com/adealink/weparty/module/account/IAccountService.kt
  6. 8 0
      app/src/main/java/com/adealink/weparty/module/activity/ActivityModule.kt
  7. 1 1
      app/src/main/java/com/adealink/weparty/module/activity/IActivityService.kt
  8. 1 1
      app/src/main/java/com/adealink/weparty/module/im/IIMService.kt
  9. 7 0
      app/src/main/java/com/adealink/weparty/module/im/IMModule.kt
  10. 1 1
      app/src/main/java/com/adealink/weparty/module/order/IOrderService.kt
  11. 7 0
      app/src/main/java/com/adealink/weparty/module/order/OrderModule.kt
  12. 1 1
      app/src/main/java/com/adealink/weparty/module/playmate/IPlaymateService.kt
  13. 7 0
      app/src/main/java/com/adealink/weparty/module/playmate/PlaymateModule.kt
  14. 1 4
      app/src/main/java/com/adealink/weparty/module/profile/IProfileService.kt
  15. 7 0
      app/src/main/java/com/adealink/weparty/module/profile/data/ProfileData.kt
  16. 1 1
      app/src/main/java/com/adealink/weparty/module/setting/ISettingService.kt
  17. 8 0
      app/src/main/java/com/adealink/weparty/module/setting/SettingModule.kt
  18. 1 1
      app/src/main/java/com/adealink/weparty/module/share/IShareService.kt
  19. 8 0
      app/src/main/java/com/adealink/weparty/module/share/ShareModule.kt
  20. 1 1
      app/src/main/java/com/adealink/weparty/module/wallet/IWalletService.kt
  21. 8 0
      app/src/main/java/com/adealink/weparty/module/wallet/WalletModule.kt
  22. 1 1
      app/src/main/java/com/adealink/weparty/module/webview/IWebService.kt
  23. 7 1
      app/src/main/java/com/adealink/weparty/module/webview/WebModule.kt
  24. 6 0
      app/src/main/res/values/colors.xml
  25. 2 1
      app/src/main/res/values/dimens.xml
  26. 1 0
      app/src/main/res/values/strings.xml
  27. 9 4
      module/account/src/main/AndroidManifest.xml
  28. 4 0
      module/account/src/main/java/com/adealink/weparty/account/AccountServiceImpl.kt
  29. 0 3
      module/account/src/main/java/com/adealink/weparty/account/constant/Tags.kt
  30. 3 4
      module/account/src/main/java/com/adealink/weparty/account/login/BaseLoginActivity.kt
  31. 3 0
      module/account/src/main/java/com/adealink/weparty/account/login/manager/LogoutCleaner.kt
  32. 85 0
      module/account/src/main/java/com/adealink/weparty/account/register/RegisterProfileActivity.kt
  33. 56 0
      module/account/src/main/java/com/adealink/weparty/account/register/dialog/ModifyAvatarDialog.kt
  34. 49 0
      module/account/src/main/java/com/adealink/weparty/account/register/dialog/comp/TakeFromAlbumComp.kt
  35. 114 0
      module/account/src/main/java/com/adealink/weparty/account/register/dialog/comp/TakePhotoComp.kt
  36. 69 0
      module/account/src/main/java/com/adealink/weparty/account/register/fragment/CompleteUserInfoFragment.kt
  37. 100 0
      module/account/src/main/java/com/adealink/weparty/account/register/fragment/SelectGenderFragment.kt
  38. 40 0
      module/account/src/main/java/com/adealink/weparty/account/register/viewmodel/RegisterProfileViewModel.kt
  39. 3 0
      module/account/src/main/java/com/adealink/weparty/account/viewModel/AccountViewModelFactory.kt
  40. 0 18
      module/account/src/main/java/com/adealink/weparty/account/viewModel/RegisterProfileViewModel.kt
  41. BIN=BIN
      module/account/src/main/res/drawable-xhdpi/account_female_ic.png
  42. BIN=BIN
      module/account/src/main/res/drawable-xhdpi/account_female_select_ic.png
  43. BIN=BIN
      module/account/src/main/res/drawable-xhdpi/account_male_ic.png
  44. BIN=BIN
      module/account/src/main/res/drawable-xhdpi/account_male_select_ic.png
  45. BIN=BIN
      module/account/src/main/res/drawable-xhdpi/account_register_birthday_edit_ic.png
  46. BIN=BIN
      module/account/src/main/res/drawable-xhdpi/account_register_modify_avatar_ic.png
  47. BIN=BIN
      module/account/src/main/res/drawable-xhdpi/account_register_top_bg.png
  48. 0 15
      module/account/src/main/res/drawable/account_apple_ic.xml
  49. 0 5
      module/account/src/main/res/drawable/account_bg_register_profile_item.xml
  50. 0 5
      module/account/src/main/res/drawable/account_delete_tips_bg.xml
  51. 0 15
      module/account/src/main/res/drawable/account_email_btn_bg.xml
  52. 0 9
      module/account/src/main/res/drawable/account_email_input_bg.xml
  53. 0 8
      module/account/src/main/res/drawable/account_email_state_bind_bg.xml
  54. 0 8
      module/account/src/main/res/drawable/account_email_state_unbind_bg.xml
  55. 0 12
      module/account/src/main/res/drawable/account_fb_select_bg.xml
  56. 0 5
      module/account/src/main/res/drawable/account_phone_input_bg.xml
  57. 4 2
      module/account/src/main/res/drawable/account_register_complete_input_bg.xml
  58. 3 2
      module/account/src/main/res/drawable/account_register_gender_bg.xml
  59. 6 3
      module/account/src/main/res/drawable/account_register_gender_select_bg.xml
  60. 0 8
      module/account/src/main/res/drawable/account_register_step_indicator_normal.xml
  61. 0 8
      module/account/src/main/res/drawable/account_register_step_indicator_selected.xml
  62. 0 18
      module/account/src/main/res/drawable/account_select_account_bg.xml
  63. 0 10
      module/account/src/main/res/drawable/account_select_account_last_ic_bg.xml
  64. 14 0
      module/account/src/main/res/layout/activity_register_profile.xml
  65. 77 0
      module/account/src/main/res/layout/dialog_register_modify_avatar.xml
  66. 186 0
      module/account/src/main/res/layout/fragment_register_complete_userinfo.xml
  67. 168 0
      module/account/src/main/res/layout/fragment_register_select_gender.xml
  68. 8 114
      module/account/src/main/res/values/strings.xml
  69. 13 1
      module/account/src/main/res/values/style.xml
  70. 4 1
      module/activity/src/main/java/com/adealink/weparty/activity/ActivityServiceImpl.kt
  71. 4 0
      module/im/src/main/java/com/adealink/weparty/im/IMServiceImpl.kt
  72. 3 0
      module/order/src/main/java/com/adealink/weparty/order/OrderServiceImpl.kt
  73. 4 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/PlaymateServiceImpl.kt
  74. 4 0
      module/setting/src/main/java/com/adealink/weparty/setting/SettingServiceImpl.kt
  75. 8 4
      module/share/src/main/java/com/adealink/weparty/share/ShareServiceImpl.kt
  76. 3 0
      module/wallet/src/main/java/com/adealink/weparty/wallet/WalletServiceImpl.kt

+ 2 - 2
app/src/main/java/com/adealink/weparty/MainActivity.kt

@@ -18,6 +18,7 @@ import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.module.account.Account
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.push.PushStatEvent
+import com.adealink.weparty.storage.AppPref
 import com.adealink.weparty.ui.MainStartUpFragment
 import com.adealink.weparty.ui.main.MainFragment
 import com.adealink.weparty.update.updateManager
@@ -158,8 +159,7 @@ class MainActivity : BaseActivity() {
     }
 
     private fun needGoRegisterActivity(): Boolean {
-        return false
-        //return AppPref.needRegister
+        return AppPref.needRegister
     }
 
     private fun inflateMainFragment(from: DispatchFrom) {

+ 7 - 0
app/src/main/java/com/adealink/weparty/aab/IService.kt

@@ -0,0 +1,7 @@
+package com.adealink.weparty.aab
+
+import com.adealink.frame.aab.IService
+
+interface IService<T : IService<T>> : IService<T> {
+    fun logout()
+}

+ 28 - 4
app/src/main/java/com/adealink/weparty/commonui/widget/CommonButton.kt

@@ -1,11 +1,14 @@
 package com.adealink.weparty.commonui.widget
 
 import android.content.Context
+import android.graphics.Typeface
 import android.graphics.drawable.GradientDrawable
 import android.graphics.drawable.StateListDrawable
 import android.util.AttributeSet
+import android.view.Gravity
 import androidx.appcompat.widget.AppCompatTextView
 import com.adealink.frame.aab.util.getCompatColor
+import com.adealink.frame.aab.util.getCompatFont
 import com.adealink.frame.util.DisplayUtil
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.drawabletoolbox.DrawableBuilder
@@ -20,6 +23,9 @@ class CommonButton @JvmOverloads constructor(
     private var buttonRadius = 0f
 
     init {
+        gravity = Gravity.CENTER
+        typeface = Typeface.create(getCompatFont(R.font.poppins_semibold), Typeface.NORMAL)
+        includeFontPadding = false
         initAttrs(context, attrs)
     }
 
@@ -43,15 +49,17 @@ class CommonButton @JvmOverloads constructor(
 
         background = StateListDrawable().apply {
             addState(
-                intArrayOf(),
+                intArrayOf(-android.R.attr.state_enabled),
                 DrawableBuilder()
                     .gradient(true)
                     .orientation(FlipDrawable.ORIENTATION_HORIZONTAL)
                     .gradientRadius(buttonRadius)
                     .cornerRadius(buttonRadius.toInt())
                     .gradientColors(
-                        getCompatColor(R.color.color_FF50FFD8),
-                        getCompatColor(R.color.color_FF2F95FF),
+//                        getCompatColor(R.color.color_FFB0F5EA),
+//                        getCompatColor(R.color.color_FFA3CDF9),
+                        getCompatColor(R.color.color_FFB0F5EA),
+                        getCompatColor(R.color.color_FFA3CDF9),
                         null
                     )
                     .gradientType(GradientDrawable.LINEAR_GRADIENT)
@@ -66,8 +74,24 @@ class CommonButton @JvmOverloads constructor(
                     .gradientRadius(buttonRadius)
                     .cornerRadius(buttonRadius.toInt())
                     .gradientColors(
-                        getCompatColor(R.color.color_FF2F95FF),
+                        getCompatColor(R.color.color_FF2A86E6),
+                        getCompatColor(R.color.color_FF48E6C2),
+                        null
+                    )
+                    .gradientType(GradientDrawable.LINEAR_GRADIENT)
+                    .angle(0)
+                    .build()
+            )
+            addState(
+                intArrayOf(),
+                DrawableBuilder()
+                    .gradient(true)
+                    .orientation(FlipDrawable.ORIENTATION_HORIZONTAL)
+                    .gradientRadius(buttonRadius)
+                    .cornerRadius(buttonRadius.toInt())
+                    .gradientColors(
                         getCompatColor(R.color.color_FF50FFD8),
+                        getCompatColor(R.color.color_FF2F95FF),
                         null
                     )
                     .gradientType(GradientDrawable.LINEAR_GRADIENT)

+ 7 - 0
app/src/main/java/com/adealink/weparty/module/account/AccountModule.kt

@@ -92,6 +92,9 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
 
             }
 
+            override fun logout() {
+            }
+
         }
     }
 
@@ -106,4 +109,8 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
     override fun refreshToken() {
         getService().refreshToken()
     }
+
+    override fun logout() {
+        getService().logout()
+    }
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/account/IAccountService.kt

@@ -1,6 +1,6 @@
 package com.adealink.weparty.module.account
 
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 
 interface IAccountService : IService<IAccountService> {
     val uid: String

+ 8 - 0
app/src/main/java/com/adealink/weparty/module/activity/ActivityModule.kt

@@ -18,6 +18,14 @@ object ActivityModule : BaseDynamicModule<IActivityService>(IActivityService::cl
             override fun getService(): IActivityService? {
                 return null
             }
+
+            override fun logout() {
+
+            }
         }
     }
+
+    override fun logout() {
+        getService().logout()
+    }
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/activity/IActivityService.kt

@@ -1,6 +1,6 @@
 package com.adealink.weparty.module.activity
 
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 
 interface IActivityService : IService<IActivityService> {
 

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/im/IIMService.kt

@@ -1,7 +1,7 @@
 package com.adealink.weparty.module.im
 
-import com.adealink.frame.aab.IService
 import com.adealink.frame.startup.IAppStartUpTask
+import com.adealink.weparty.aab.IService
 
 interface IIMService : IService<IIMService>, IAppStartUpTask {
 

+ 7 - 0
app/src/main/java/com/adealink/weparty/module/im/IMModule.kt

@@ -29,6 +29,9 @@ object IMModule : BaseDynamicModule<IIMService>(IIMService::class), IIMService {
 
             override fun appOnCreateSubTask(application: Application) {
             }
+
+            override fun logout() {
+            }
         }
     }
 
@@ -48,5 +51,9 @@ object IMModule : BaseDynamicModule<IIMService>(IIMService::class), IIMService {
         getService().appOnCreateSubTask(application)
     }
 
+    override fun logout() {
+        getService().logout()
+    }
+
 
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/order/IOrderService.kt

@@ -1,6 +1,6 @@
 package com.adealink.weparty.module.order
 
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 
 interface IOrderService : IService<IOrderService> {
 

+ 7 - 0
app/src/main/java/com/adealink/weparty/module/order/OrderModule.kt

@@ -18,6 +18,13 @@ object OrderModule : BaseDynamicModule<IOrderService>(IOrderService::class),
             override fun getService(): IOrderService? {
                 return null
             }
+
+            override fun logout() {
+            }
         }
     }
+
+    override fun logout() {
+        getService().logout()
+    }
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/playmate/IPlaymateService.kt

@@ -1,7 +1,7 @@
 package com.adealink.weparty.module.playmate
 
 import androidx.lifecycle.ViewModelStoreOwner
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 import com.adealink.weparty.module.playmate.viewmodel.IPlaymateViewModel
 
 interface IPlaymateService : IService<IPlaymateService> {

+ 7 - 0
app/src/main/java/com/adealink/weparty/module/playmate/PlaymateModule.kt

@@ -24,10 +24,17 @@ object PlaymateModule : BaseDynamicModule<IPlaymateService>(IPlaymateService::cl
             override fun getPlaymateViewModel(owner: ViewModelStoreOwner): IPlaymateViewModel? {
                 return null
             }
+
+            override fun logout() {
+            }
         }
     }
 
     override fun getPlaymateViewModel(owner: ViewModelStoreOwner): IPlaymateViewModel? {
         return getService().getPlaymateViewModel(owner)
     }
+
+    override fun logout() {
+        getService().logout()
+    }
 }

+ 1 - 4
app/src/main/java/com/adealink/weparty/module/profile/IProfileService.kt

@@ -1,8 +1,8 @@
 package com.adealink.weparty.module.profile
 
 import androidx.lifecycle.ViewModelStoreOwner
-import com.adealink.frame.aab.IService
 import com.adealink.frame.base.Rlt
+import com.adealink.weparty.aab.IService
 import com.adealink.weparty.module.profile.data.UserConfigType
 import com.adealink.weparty.module.profile.data.UserConfigType.Companion.NECESSARY_USER_ATTR_SET
 import com.adealink.weparty.module.profile.data.UserInfo
@@ -41,7 +41,4 @@ interface IProfileService : IService<IProfileService> {
     ): Rlt<List<UserInfo>>
 
     fun getProfileViewModel(owner: ViewModelStoreOwner): IProfileViewModel?
-
-
-    fun logout()
 }

+ 7 - 0
app/src/main/java/com/adealink/weparty/module/profile/data/ProfileData.kt

@@ -51,6 +51,13 @@ data class UserInfo(
     @SerializedName("playmate") var playmate: Boolean? = null, //是否陪玩师
 ) : Parcelable {
 
+    fun isComplete(): Boolean {
+        //用户个人信息是否完整
+        return false
+//        return !avatar.isNullOrEmpty()
+//                && !nickName.isNullOrEmpty()
+//                && gender != null
+    }
 
     fun isFemale() = gender == Gender.FEMALE.gender
 

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/setting/ISettingService.kt

@@ -1,7 +1,7 @@
 package com.adealink.weparty.module.setting
 
 import androidx.fragment.app.FragmentManager
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 
 interface ISettingService : IService<ISettingService> {
     fun showLanguageSettingDialog(fragmentManager: FragmentManager)

+ 8 - 0
app/src/main/java/com/adealink/weparty/module/setting/SettingModule.kt

@@ -22,10 +22,18 @@ object SettingModule : BaseDynamicModule<ISettingService>(ISettingService::class
 
             override fun showLanguageSettingDialog(fragmentManager: FragmentManager) {
             }
+
+            override fun logout() {
+
+            }
         }
     }
 
     override fun showLanguageSettingDialog(fragmentManager: FragmentManager) {
         getService().showLanguageSettingDialog(fragmentManager)
     }
+
+    override fun logout() {
+        getService().logout()
+    }
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/share/IShareService.kt

@@ -1,6 +1,6 @@
 package com.adealink.weparty.module.share
 
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 
 interface IShareService : IService<IShareService> {
 

+ 8 - 0
app/src/main/java/com/adealink/weparty/module/share/ShareModule.kt

@@ -18,6 +18,14 @@ object ShareModule : BaseDynamicModule<IShareService>(IShareService::class),
             override fun getService(): IShareService? {
                 return null
             }
+
+            override fun logout() {
+
+            }
         }
     }
+
+    override fun logout() {
+        getService().logout()
+    }
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/wallet/IWalletService.kt

@@ -1,6 +1,6 @@
 package com.adealink.weparty.module.wallet
 
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 
 interface IWalletService : IService<IWalletService> {
 

+ 8 - 0
app/src/main/java/com/adealink/weparty/module/wallet/WalletModule.kt

@@ -18,6 +18,14 @@ object WalletModule : BaseDynamicModule<IWalletService>(IWalletService::class),
             override fun getService(): IWalletService? {
                 return null
             }
+
+            override fun logout() {
+
+            }
         }
     }
+
+    override fun logout() {
+        getService().logout()
+    }
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/webview/IWebService.kt

@@ -1,6 +1,6 @@
 package com.adealink.weparty.module.webview
 
-import com.adealink.frame.aab.IService
+import com.adealink.weparty.aab.IService
 
 interface IWebService : IService<IWebService> {
 

+ 7 - 1
app/src/main/java/com/adealink/weparty/module/webview/WebModule.kt

@@ -1,7 +1,6 @@
 package com.adealink.weparty.module.webview
 
 import com.adealink.frame.aab.BaseDynamicModule
-import com.adealink.weparty.R
 
 object WebModule : BaseDynamicModule<IWebService>(IWebService::class), IWebService {
 
@@ -35,7 +34,14 @@ object WebModule : BaseDynamicModule<IWebService>(IWebService::class), IWebServi
                 return null
             }
 
+            override fun logout() {
+            }
+
         }
     }
 
+    override fun logout() {
+        getService().logout()
+    }
+
 }

+ 6 - 0
app/src/main/res/values/colors.xml

@@ -1180,4 +1180,10 @@
     <color name="color_FFE5E6EB">#FFE5E6EB</color>
     <color name="color_FF466811">#FF466811</color>
     <color name="color_FFCDCFD9">#FFCDCFD9</color>
+
+    <color name="color_FF2A86E6">#FF2A86E6</color>
+    <color name="color_FF48E6C2">#FF48E6C2</color>
+
+    <color name="color_FFB0F5EA">#B0F5EA</color>
+    <color name="color_FFA3CDF9">#A3CDF9</color>
 </resources>

+ 2 - 1
app/src/main/res/values/dimens.xml

@@ -1,5 +1,7 @@
 <resources>
     <dimen name="common_top_bar_height">45dp</dimen>
+    <dimen name="common_button_height">48dp</dimen>
+
     <dimen name="wheel_item_width">160dp</dimen>
     <dimen name="wheel_item_height">40dp</dimen>
     <dimen name="wheel_divider_height">1dp</dimen>
@@ -8,7 +10,6 @@
     <dimen name="activity_horizontal_margin">16dp</dimen>
     <dimen name="activity_vertical_margin">16dp</dimen>
 
-
     <dimen name="top_float_view_height">90dp</dimen>
     <dimen name="top_float_view_margin_horizontal">12dp</dimen>
 </resources>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -260,4 +260,5 @@
     <string name="profile_create_order">Order</string>
     <string name="photo_size_not_valid">您选择的照片分辨率较低,请重新选择</string>
     <string name="common_video_select_duration_limit_tip">只能选择时长在 %1$s 秒以内的视频。</string>
+    <string name="common_hi">Hi</string>
 </resources>

+ 9 - 4
module/account/src/main/AndroidManifest.xml

@@ -13,7 +13,7 @@
         <dist:fusing dist:include="true" />
         <dist:delivery>
             <dist:install-time>
-                <dist:removable dist:value="true"/>
+                <dist:removable dist:value="true" />
             </dist:install-time>
         </dist:delivery>
     </dist:module>
@@ -21,8 +21,8 @@
     <application>
 
         <activity
-            android:exported="true"
             android:name=".login.LoginActivity"
+            android:exported="true"
             android:launchMode="singleTask"
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme">
@@ -52,11 +52,16 @@
 
         </activity>
 
+        <activity
+            android:name=".register.RegisterProfileActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/AppTheme" />
+
     </application>
 
     <queries>
-        <package android:name="com.whatsapp"/>
-        <package android:name="com.whatsapp.w4b"/>
+        <package android:name="com.whatsapp" />
+        <package android:name="com.whatsapp.w4b" />
     </queries>
 
     <uses-sdk

+ 4 - 0
module/account/src/main/java/com/adealink/weparty/account/AccountServiceImpl.kt

@@ -52,4 +52,8 @@ class AccountServiceImpl : IAccountService {
     override fun getService(): IAccountService {
         return this
     }
+
+    override fun logout() {
+
+    }
 }

+ 0 - 3
module/account/src/main/java/com/adealink/weparty/account/constant/Tags.kt

@@ -6,8 +6,5 @@ const val TAG_FB_AUTH = "tag_fb_auth"
 const val TAG_GOOGLE_AUTH = "tag_google_auth"
 const val TAG_TIKTOK_AUTH = "tag_tiktok_auth"
 const val TAG_ACCOUNT_LOGIN_PHONE = "${TAG_ACCOUNT_LOGIN}_phone"
-const val TAG_GENDER_SELECT_FRAGMENT = "GenderSelectFragment"
-const val TAG_RECOMMEND_FOLLOW_FRAGMENT = "RecommendFollowFragment"
-const val TAG_BIRTHDAY_SELECT_FRAGMENT = "BirthdaySelectFragment"
 const val TAG_ACCOUNT_LOGIN_EMAIL = "${TAG_ACCOUNT_LOGIN}_email"
 const val TAG_ACCOUNT_LOGIN_COUNTRY_SELECT = "${TAG_ACCOUNT_LOGIN}_country_select"

+ 3 - 4
module/account/src/main/java/com/adealink/weparty/account/login/BaseLoginActivity.kt

@@ -14,6 +14,7 @@ import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.module.account.Account
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.storage.AppPref
 
 abstract class BaseLoginActivity : BaseActivity() {
 
@@ -48,10 +49,8 @@ abstract class BaseLoginActivity : BaseActivity() {
     }
 
     private fun needGoRegister(userInfo: UserInfo): Boolean {
-        //todo: 是否完成注册
-        return false
-//        AppPref.needRegister = userInfo.completedInfo != RegisterProfileActivity.HAS_FINISH_REGISTER
-//        return AppPref.needRegister
+        AppPref.needRegister = !userInfo.isComplete()
+        return AppPref.needRegister
     }
 
 }

+ 3 - 0
module/account/src/main/java/com/adealink/weparty/account/login/manager/LogoutCleaner.kt

@@ -23,5 +23,8 @@ object LogoutCleaner {
         }
         AccountLocalService.loginType = ""
         globalConfigManager.logout()
+
+        //模块执行退登清理
+
     }
 }

+ 85 - 0
module/account/src/main/java/com/adealink/weparty/account/register/RegisterProfileActivity.kt

@@ -0,0 +1,85 @@
+package com.adealink.weparty.account.register
+
+import androidx.activity.viewModels
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.router.Router
+import com.adealink.frame.router.annotation.BindExtra
+import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.weparty.account.R
+import com.adealink.weparty.account.databinding.ActivityRegisterProfileBinding
+import com.adealink.weparty.account.login.manager.loginManager
+import com.adealink.weparty.account.register.fragment.CompleteUserInfoFragment
+import com.adealink.weparty.account.register.fragment.SelectGenderFragment
+import com.adealink.weparty.account.register.viewmodel.RegisterProfileViewModel
+import com.adealink.weparty.account.viewModel.AccountViewModelFactory
+import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.module.account.Account
+import com.adealink.weparty.module.account.AccountModule
+
+@RouterUri(path = [Account.Register.PATH], desc = "注册页面")
+class RegisterProfileActivity : BaseActivity() {
+    private val binding by viewBinding(ActivityRegisterProfileBinding::inflate)
+    private val viewModel by viewModels<RegisterProfileViewModel> { AccountViewModelFactory() }
+
+    @BindExtra(Account.Common.EXTRA_FROM)
+    var from: String? = null
+
+    override fun onBeforeCreate() {
+        super.onBeforeCreate()
+        Router.bind(this)
+        if (from == "login") {
+            loginManager.setIsNewRegister(true)
+        }
+    }
+
+    override fun initViews() {
+        super.initViews()
+        setContentView(binding.root)
+        inflateGenderSelectFragment()
+    }
+
+    override fun observeViewModel() {
+        viewModel.genderSelectFinish.observeWithoutCache(this) {
+            inflateCompleteUserInfoFragment()
+        }
+        viewModel.completeUserInfoFinish.observeWithoutCache(this) {
+
+        }
+    }
+
+    private fun inflateGenderSelectFragment() {
+        val fragment = supportFragmentManager.findFragmentByTag(TAG_GENDER_SELECT_FRAGMENT)
+        if (fragment?.isDetached == true) {
+            return
+        }
+        supportFragmentManager.beginTransaction()
+            .replace(R.id.fl_content, SelectGenderFragment(), TAG_GENDER_SELECT_FRAGMENT)
+            .commitAllowingStateLoss()
+    }
+
+    private fun inflateCompleteUserInfoFragment() {
+        val fragment = supportFragmentManager.findFragmentByTag(TAG_COMPLETE_USERINFO_FRAGMENT)
+        if (fragment?.isDetached == true) {
+            return
+        }
+        supportFragmentManager.beginTransaction()
+            .replace(R.id.fl_content, CompleteUserInfoFragment(), TAG_COMPLETE_USERINFO_FRAGMENT)
+            .commitAllowingStateLoss()
+    }
+
+    override fun onBackPressed() {
+        if (supportFragmentManager.findFragmentByTag(TAG_COMPLETE_USERINFO_FRAGMENT) != null) {
+            inflateGenderSelectFragment()
+            return
+        }
+        super.onBackPressed()
+        //回到登录页
+        AccountModule.logout()
+    }
+
+    companion object {
+        const val TAG_GENDER_SELECT_FRAGMENT = "GenderSelectFragment"
+        const val TAG_COMPLETE_USERINFO_FRAGMENT = "CompleteUserInfoFragment"
+    }
+
+}

+ 56 - 0
module/account/src/main/java/com/adealink/weparty/account/register/dialog/ModifyAvatarDialog.kt

@@ -0,0 +1,56 @@
+package com.adealink.weparty.account.register.dialog
+
+import androidx.fragment.app.activityViewModels
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.account.R
+import com.adealink.weparty.account.databinding.DialogRegisterModifyAvatarBinding
+import com.adealink.weparty.account.register.dialog.comp.TakeFromAlbumComp
+import com.adealink.weparty.account.register.dialog.comp.TakePhotoComp
+import com.adealink.weparty.account.register.viewmodel.RegisterProfileViewModel
+import com.adealink.weparty.account.viewModel.AccountViewModelFactory
+import com.adealink.weparty.commonui.widget.BottomDialogFragment
+
+class ModifyAvatarDialog : BottomDialogFragment(R.layout.dialog_register_modify_avatar) {
+    private val binding by viewBinding(DialogRegisterModifyAvatarBinding::bind)
+
+    private val viewModel by activityViewModels<RegisterProfileViewModel> { AccountViewModelFactory() }
+        private lateinit var takePhotoComp: TakePhotoComp
+        private lateinit var takeFromAlbumComp: TakeFromAlbumComp
+        override fun initViews() {
+        super.initViews()
+        binding.tvTakePhoto.onClick {
+            takePhoto()
+        }
+        binding.tvFromAlbum.onClick {
+            takeFromAlbum()
+        }
+        binding.tvUseDefaultAvatar.onClick {
+            useDefaultAvatar()
+        }
+    }
+
+    override fun initComponents() {
+        super.initComponents()
+        TakePhotoComp(this).also {
+            takePhotoComp = it
+        }.attach()
+        TakeFromAlbumComp(this).also {
+            takeFromAlbumComp = it
+        }.attach()
+    }
+
+    private fun takePhoto() {
+        takePhotoComp.takePhoto()
+    }
+
+    private fun takeFromAlbum() {
+        takeFromAlbumComp.takeFromAlbum()
+    }
+
+    private fun useDefaultAvatar() {
+        viewModel.selectAvatarPath(null, null)
+    }
+
+
+}

+ 49 - 0
module/account/src/main/java/com/adealink/weparty/account/register/dialog/comp/TakeFromAlbumComp.kt

@@ -0,0 +1,49 @@
+package com.adealink.weparty.account.register.dialog.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.view.ViewComponent
+import com.adealink.frame.mvvm.viewmodel.activityViewModels
+import com.adealink.weparty.account.register.viewmodel.RegisterProfileViewModel
+import com.adealink.weparty.account.viewModel.AccountViewModelFactory
+import com.adealink.weparty.imageselect.SelectImageLifecycleObserver
+import com.adealink.weparty.imageselect.clip.avatarClipParam
+import com.adealink.weparty.imageselect.model.LocalMedia
+import com.adealink.weparty.imageselect.model.MediaType
+
+class TakeFromAlbumComp(
+    lifecycleOwner: LifecycleOwner
+) : ViewComponent(lifecycleOwner) {
+    private val viewModel by activityViewModels<RegisterProfileViewModel> { AccountViewModelFactory() }
+    private val selectImageObserver: SelectImageLifecycleObserver by fastLazy {
+        object : SelectImageLifecycleObserver(requireActivity().activityResultRegistry) {
+
+            override fun onResult(
+                source: String,
+                resultCode: Int,
+                path: String?,
+                uri: String?,
+                mediaType: MediaType,
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
+            ) {
+                if (path.isNullOrEmpty() || uri.isNullOrEmpty()) {
+                    return
+                }
+                viewModel.selectAvatarPath(path, uri)
+            }
+
+        }
+    }
+
+    override fun onCreate() {
+        super.onCreate()
+        lifecycle.addObserver(selectImageObserver)
+    }
+
+    fun takeFromAlbum() {
+        selectImageObserver.launch(
+            clipParamData = avatarClipParam, gifOpt = false
+        )
+    }
+}

+ 114 - 0
module/account/src/main/java/com/adealink/weparty/account/register/dialog/comp/TakePhotoComp.kt

@@ -0,0 +1,114 @@
+package com.adealink.weparty.account.register.dialog.comp
+
+import android.Manifest
+import android.app.Activity
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.log.Log
+import com.adealink.frame.mvvm.view.ViewComponent
+import com.adealink.frame.mvvm.viewmodel.activityViewModels
+import com.adealink.frame.util.FileProvider7
+import com.adealink.weparty.App
+import com.adealink.weparty.account.register.viewmodel.RegisterProfileViewModel
+import com.adealink.weparty.account.viewModel.AccountViewModelFactory
+import com.adealink.weparty.commonui.toast.util.showToast
+import com.adealink.weparty.hardware.Hardware
+import com.adealink.weparty.imageselect.ImageSelectActivity
+import com.adealink.weparty.imageselect.selectpreview.SelectPreviewLifecycleObserver
+import com.adealink.weparty.imageselect.selectpreview.SelectPreviewResult
+import com.adealink.weparty.imageselect.takePhoto.TakePhotoLifecycleObserver
+import com.adealink.weparty.permission.PermissionUtils
+import com.adealink.weparty.storage.file.FilePath.takePhotoImagePath
+import java.io.File
+
+class TakePhotoComp(
+    lifecycleOwner: LifecycleOwner,
+) : ViewComponent(lifecycleOwner) {
+    private val viewModel by activityViewModels<RegisterProfileViewModel> { AccountViewModelFactory() }
+    private lateinit var takePhotoObserver: TakePhotoLifecycleObserver
+    private lateinit var selectPreviewObserver: SelectPreviewLifecycleObserver
+    private var takePhotoTempFile: File? = null
+
+    override fun onCreate() {
+        super.onCreate()
+        activity?.let { act ->
+            takePhotoImagePath?.let {
+                takePhotoTempFile = File(it, "${System.currentTimeMillis()}.jpg")
+            }
+            takePhotoObserver = object : TakePhotoLifecycleObserver(act.activityResultRegistry) {
+                override fun onResult(resultCode: Int) {
+                    Log.i(
+                        ImageSelectActivity.Companion.TAG,
+                        "takePhotoObserver onResult: $resultCode"
+                    )
+                    if (resultCode != Activity.RESULT_OK) {
+                        return
+                    }
+                    handleTakePhotoResult()
+                }
+            }
+            lifecycle.addObserver(takePhotoObserver)
+
+            selectPreviewObserver =
+                object : SelectPreviewLifecycleObserver(act.activityResultRegistry) {
+                    override fun onResult(result: SelectPreviewResult) {
+                        val resultCode = result.resultCode
+                        val path = result.path
+                        val uri = result.uri
+                        if (resultCode != Activity.RESULT_OK) {
+                            return
+                        }
+
+                        viewModel.selectAvatarPath(path, uri)
+                    }
+                }
+            lifecycle.addObserver(selectPreviewObserver)
+        }
+    }
+
+    fun takePhoto() {
+        val activity = activity ?: return
+        if (PermissionUtils.hasPermissions(activity, Manifest.permission.CAMERA)) {
+            when (val rlt = App.instance.hardwareManager.checkHardwareAvailable(Hardware.CAMERA)) {
+                is Rlt.Failed -> {
+                    showToast(rlt.error.msg)
+                }
+
+                is Rlt.Success -> {
+                    takePhotoTempFile?.let {
+                        takePhotoObserver.launch(it)
+                    }
+                }
+            }
+        } else {
+            PermissionUtils.getRxPermissions(activity)
+                .request(Manifest.permission.CAMERA).subscribe { granted ->
+                    if (granted) {
+                        when (val rlt =
+                            App.instance.hardwareManager.checkHardwareAvailable(Hardware.CAMERA)) {
+                            is Rlt.Failed -> {
+                                showToast(rlt.error.msg)
+                            }
+
+                            is Rlt.Success -> {
+                                takePhotoTempFile?.let {
+                                    takePhotoObserver.launch(it)
+                                }
+                            }
+                        }
+                    }
+                }
+        }
+    }
+
+    private fun handleTakePhotoResult() {
+        val activity = activity ?: return
+        if (takePhotoTempFile?.exists() == true) {
+            selectPreviewObserver.launch(
+                takePhotoTempFile?.absolutePath,
+                FileProvider7.getUriForFile(activity, takePhotoTempFile)
+                    ?.toString(),
+            )
+        }
+    }
+}

+ 69 - 0
module/account/src/main/java/com/adealink/weparty/account/register/fragment/CompleteUserInfoFragment.kt

@@ -0,0 +1,69 @@
+package com.adealink.weparty.account.register.fragment
+
+import android.view.KeyEvent
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
+import androidx.fragment.app.activityViewModels
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.util.DisplayUtil.getStatusBarHeight
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.account.R
+import com.adealink.weparty.account.databinding.FragmentRegisterCompleteUserinfoBinding
+import com.adealink.weparty.account.register.dialog.ModifyAvatarDialog
+import com.adealink.weparty.account.register.viewmodel.RegisterProfileViewModel
+import com.adealink.weparty.account.viewModel.AccountViewModelFactory
+import com.adealink.weparty.commonui.BaseFragment
+
+class CompleteUserInfoFragment : BaseFragment(R.layout.fragment_register_complete_userinfo) {
+    private val binding by viewBinding(FragmentRegisterCompleteUserinfoBinding::bind)
+    private val viewModel by activityViewModels<RegisterProfileViewModel> { AccountViewModelFactory() }
+    override fun initViews() {
+        super.initViews()
+        binding.topBar.updateLayoutParams <ConstraintLayout.LayoutParams>{
+            topMargin = activity?.let { act ->
+                getStatusBarHeight(act)
+            } ?: 0
+        }
+        binding.topBar.backCallback = {
+            activity?.onBackPressed()
+        }
+        binding.ivAvatar.onClick {
+            modifyAvatar()
+        }
+        binding.ivModifyAvatar.onClick {
+            modifyAvatar()
+        }
+        binding.clBirthday.onClick {
+
+        }
+        binding.btnNext.onClick {
+            nextStep()
+        }
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+        viewModel.avatarUriLD.observe(viewLifecycleOwner) {
+            binding.ivAvatar.setImageURI(it)
+        }
+    }
+
+    private fun modifyAvatar() {
+        ModifyAvatarDialog().show(
+            childFragmentManager, "ModifyAvatarDialog"
+        )
+    }
+
+    private fun modifyBirthday() {
+
+    }
+
+    private fun nextStep() {
+
+    }
+
+    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+        return super.onKeyDown(keyCode, event)
+    }
+
+}

+ 100 - 0
module/account/src/main/java/com/adealink/weparty/account/register/fragment/SelectGenderFragment.kt

@@ -0,0 +1,100 @@
+package com.adealink.weparty.account.register.fragment
+
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
+import androidx.fragment.app.activityViewModels
+import com.adealink.frame.aab.util.getCompatColor
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.util.DisplayUtil.getStatusBarHeight
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.account.R
+import com.adealink.weparty.account.databinding.FragmentRegisterSelectGenderBinding
+import com.adealink.weparty.account.register.viewmodel.RegisterProfileViewModel
+import com.adealink.weparty.account.viewModel.AccountViewModelFactory
+import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.module.profile.data.Gender
+import com.adealink.weparty.R as APP_R
+
+class SelectGenderFragment : BaseFragment(R.layout.fragment_register_select_gender) {
+    private val binding by viewBinding(FragmentRegisterSelectGenderBinding::bind)
+
+    private val viewModel by activityViewModels<RegisterProfileViewModel> { AccountViewModelFactory() }
+
+    override fun initViews() {
+        super.initViews()
+        binding.topBar.updateLayoutParams <ConstraintLayout.LayoutParams>{
+            topMargin = activity?.let { act ->
+                getStatusBarHeight(act)
+            } ?: 0
+        }
+        binding.topBar.backCallback = {
+            activity?.onBackPressed()
+        }
+        binding.clMale.onClick {
+            viewModel.selectGender(Gender.MALE)
+        }
+        binding.clFemale.onClick {
+            viewModel.selectGender(Gender.FEMALE)
+        }
+        binding.btnNext.onClick {
+            nextStep()
+        }
+
+        viewModel.genderLD.value?.let {
+            selectGender(it)
+        }
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+        viewModel.genderLD.observe(viewLifecycleOwner) {
+            selectGender(it)
+        }
+    }
+
+    private fun selectGender(gender: Gender) {
+        when (gender) {
+            Gender.UNKNOWN -> {
+                binding.tvMale.setTextColor(getCompatColor(APP_R.color.color_FF1D2129))
+                binding.tvMale.setBackgroundResource(R.drawable.account_register_gender_bg)
+                binding.ivMale.setImageResource(R.drawable.account_male_ic)
+
+                binding.tvFemale.setTextColor(getCompatColor(APP_R.color.color_FF1D2129))
+                binding.tvFemale.setBackgroundResource(R.drawable.account_register_gender_bg)
+                binding.ivFemale.setImageResource(R.drawable.account_female_ic)
+
+                binding.btnNext.isEnabled = false
+            }
+
+            Gender.MALE -> {
+                binding.tvMale.setTextColor(getCompatColor(APP_R.color.white))
+                binding.tvMale.setBackgroundResource(R.drawable.account_register_gender_select_bg)
+                binding.ivMale.setImageResource(R.drawable.account_male_select_ic)
+
+                binding.tvFemale.setTextColor(getCompatColor(APP_R.color.color_FF1D2129))
+                binding.tvFemale.setBackgroundResource(R.drawable.account_register_gender_bg)
+                binding.ivFemale.setImageResource(R.drawable.account_female_ic)
+
+                binding.btnNext.isEnabled = true
+            }
+
+            Gender.FEMALE -> {
+                binding.tvMale.setTextColor(getCompatColor(APP_R.color.color_FF1D2129))
+                binding.tvMale.setBackgroundResource(R.drawable.account_register_gender_bg)
+                binding.ivMale.setImageResource(R.drawable.account_male_ic)
+
+                binding.tvFemale.setTextColor(getCompatColor(APP_R.color.white))
+                binding.tvFemale.setBackgroundResource(R.drawable.account_register_gender_select_bg)
+                binding.ivFemale.setImageResource(R.drawable.account_female_select_ic)
+
+                binding.btnNext.isEnabled = true
+            }
+        }
+    }
+
+    private fun nextStep() {
+
+        viewModel.notifyGenderSelectFinish()
+    }
+
+}

+ 40 - 0
module/account/src/main/java/com/adealink/weparty/account/register/viewmodel/RegisterProfileViewModel.kt

@@ -0,0 +1,40 @@
+package com.adealink.weparty.account.register.viewmodel
+
+import androidx.lifecycle.MutableLiveData
+import com.adealink.frame.mvvm.livedata.ExtLiveData
+import com.adealink.frame.mvvm.livedata.ExtMutableLiveData
+import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.module.profile.data.Gender
+
+class RegisterProfileViewModel : BaseViewModel() {
+    val genderLD = MutableLiveData<Gender>()
+    fun selectGender(gender: Gender) {
+        genderLD.send(gender)
+    }
+
+    val avatarPathLD = MutableLiveData<String>()
+    val avatarUriLD = MutableLiveData<String>()
+    var avatarPath: String? = null
+    fun selectAvatarPath(avatarPath: String?, uri: String?) {
+        this.avatarPath = avatarPath
+        avatarPathLD.send(avatarPath)
+        avatarUriLD.send(uri)
+    }
+
+
+    val birthdayLD = MutableLiveData<Long>()
+    fun selectBirthday(birthday: Long) {
+        birthdayLD.send(birthday)
+    }
+
+    var genderSelectFinish: ExtLiveData<Unit> = ExtMutableLiveData()
+    var completeUserInfoFinish: ExtLiveData<Unit> = ExtMutableLiveData()
+
+    fun notifyGenderSelectFinish() {
+        genderSelectFinish.send(Unit)
+    }
+
+    fun notifyCompleteUserInfoFinish() {
+        completeUserInfoFinish.send(Unit)
+    }
+}

+ 3 - 0
module/account/src/main/java/com/adealink/weparty/account/viewModel/AccountViewModelFactory.kt

@@ -3,6 +3,7 @@ package com.adealink.weparty.account.viewModel
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import com.adealink.weparty.account.login.viewmodel.LoginViewModel
+import com.adealink.weparty.account.register.viewmodel.RegisterProfileViewModel
 
 @Suppress("UNCHECKED_CAST")
 class AccountViewModelFactory : ViewModelProvider.NewInstanceFactory() {
@@ -12,8 +13,10 @@ class AccountViewModelFactory : ViewModelProvider.NewInstanceFactory() {
             when {
                 isAssignableFrom(LoginViewModel::class.java) ->
                     LoginViewModel()
+
                 isAssignableFrom(RegisterProfileViewModel::class.java) ->
                     RegisterProfileViewModel()
+
                 else ->
                     throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}")
             } as T

+ 0 - 18
module/account/src/main/java/com/adealink/weparty/account/viewModel/RegisterProfileViewModel.kt

@@ -1,18 +0,0 @@
-package com.adealink.weparty.account.viewModel
-
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import com.adealink.frame.mvvm.viewmodel.BaseViewModel
-
-class RegisterProfileViewModel: BaseViewModel() {
-    var genderSelectFinish: LiveData<Boolean> = MutableLiveData(false)
-    var birthdaySelectFinish: LiveData<Boolean> = MutableLiveData(false)
-
-    fun notifyGenderSelectFinish() {
-        genderSelectFinish.send(true)
-    }
-
-    fun notifyBirthdaySelectFinish() {
-        birthdaySelectFinish.send(true)
-    }
-}

BIN=BIN
module/account/src/main/res/drawable-xhdpi/account_female_ic.png


BIN=BIN
module/account/src/main/res/drawable-xhdpi/account_female_select_ic.png


BIN=BIN
module/account/src/main/res/drawable-xhdpi/account_male_ic.png


BIN=BIN
module/account/src/main/res/drawable-xhdpi/account_male_select_ic.png


BIN=BIN
module/account/src/main/res/drawable-xhdpi/account_register_birthday_edit_ic.png


BIN=BIN
module/account/src/main/res/drawable-xhdpi/account_register_modify_avatar_ic.png


BIN=BIN
module/account/src/main/res/drawable-xhdpi/account_register_top_bg.png


+ 0 - 15
module/account/src/main/res/drawable/account_apple_ic.xml

@@ -1,15 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportWidth="22.773"
-    android:viewportHeight="22.773">
-
-    <path
-        android:fillColor="#000000"
-        android:pathData="M15.769,0c0.053,0 0.106,0 0.162,0c0.13,1.606 -0.483,2.806 -1.228,3.675c-0.731,0.863 -1.732,1.7 -3.351,1.573c-0.108,-1.583 0.506,-2.694 1.25,-3.561C13.292,0.879 14.557,0.16 15.769,0z" />
-
-    <path
-        android:fillColor="#000000"
-        android:pathData="M20.67,16.716c0,0.016 0,0.03 0,0.045c-0.455,1.378 -1.104,2.559 -1.896,3.655c-0.723,0.995 -1.609,2.334 -3.191,2.334c-1.367,0 -2.275,-0.879 -3.676,-0.903c-1.482,-0.024 -2.297,0.735 -3.652,0.926c-0.155,0 -0.31,0 -0.462,0c-0.995,-0.144 -1.798,-0.932 -2.383,-1.642c-1.725,-2.098 -3.058,-4.808 -3.306,-8.276c0,-0.34 0,-0.679 0,-1.019c0.105,-2.482 1.311,-4.5 2.914,-5.478c0.846,-0.52 2.009,-0.963 3.304,-0.765c0.555,0.086 1.122,0.276 1.619,0.464c0.471,0.181 1.06,0.502 1.618,0.485c0.378,-0.011 0.754,-0.208 1.135,-0.347c1.116,-0.403 2.21,-0.865 3.652,-0.648c1.733,0.262 2.963,1.032 3.723,2.22c-1.466,0.933 -2.625,2.339 -2.427,4.74C17.818,14.688 19.086,15.964 20.67,16.716z" />
-
-</vector>

+ 0 - 5
module/account/src/main/res/drawable/account_bg_register_profile_item.xml

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

+ 0 - 5
module/account/src/main/res/drawable/account_delete_tips_bg.xml

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

+ 0 - 15
module/account/src/main/res/drawable/account_email_btn_bg.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false">
-        <shape>
-            <solid android:color="@color/color_7F00E0D7" />
-            <corners android:radius="50dp" />
-        </shape>
-    </item>
-    <item android:state_enabled="true">
-        <shape>
-            <solid android:color="@color/color_FF00E0D7" />
-            <corners android:radius="50dp" />
-        </shape>
-    </item>
-</selector>

+ 0 - 9
module/account/src/main/res/drawable/account_email_input_bg.xml

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

+ 0 - 8
module/account/src/main/res/drawable/account_email_state_bind_bg.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <gradient
-        android:startColor="@color/color_1A23D780"
-        android:endColor="@color/color_0023D780"
-        android:angle="270"
-        />
-</shape>

+ 0 - 8
module/account/src/main/res/drawable/account_email_state_unbind_bg.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <gradient
-        android:endColor="@color/color_00FFBE2C"
-        android:startColor="@color/color_1AFFBE2C"
-        android:angle="270"
-        />
-</shape>

+ 0 - 12
module/account/src/main/res/drawable/account_fb_select_bg.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item>
-        <shape android:shape="rectangle">
-            <gradient
-                android:angle="270"
-                android:endColor="@color/color_001079FC"
-                android:startColor="@color/color_331079FC"
-                android:type="linear" />
-        </shape>
-    </item>
-</layer-list>

+ 0 - 5
module/account/src/main/res/drawable/account_phone_input_bg.xml

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

+ 4 - 2
module/account/src/main/res/drawable/account_country_search_bg.xml → module/account/src/main/res/drawable/account_register_complete_input_bg.xml

@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
-        <solid android:color="@color/color_FFF5F7FA" />
-        <corners android:radius="20dp" />
+
+    <corners android:radius="50dp" />
+    <solid android:color="@color/white" />
+
 </shape>

+ 3 - 2
module/account/src/main/res/drawable/account_register_profile_bg.xml → module/account/src/main/res/drawable/account_register_gender_bg.xml

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
-    <solid android:color="@color/white"/>
-    <corners android:topLeftRadius="16dp" android:topRightRadius="16dp"/>
+
+    <corners android:radius="30dp" />
+    <solid android:color="@color/color_FFF2F3F5" />
 
 </shape>

+ 6 - 3
module/account/src/main/res/drawable/account_login_test_bg.xml → module/account/src/main/res/drawable/account_register_gender_select_bg.xml

@@ -1,9 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
+
+    <corners android:radius="30dp" />
     <gradient
-        android:angle="270"
-        android:endColor="@color/color_app_main"
-        android:startColor="@color/white"
+        android:angle="225"
+        android:endColor="#CC4ED2FF"
+        android:startColor="#CCB1EF5D"
         android:type="linear" />
+
 </shape>

+ 0 - 8
module/account/src/main/res/drawable/account_register_step_indicator_normal.xml

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

+ 0 - 8
module/account/src/main/res/drawable/account_register_step_indicator_selected.xml

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

+ 0 - 18
module/account/src/main/res/drawable/account_select_account_bg.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false">
-        <shape>
-            <solid android:color="@color/color_FFF5F7FA" />
-            <corners android:radius="12dp" />
-        </shape>
-    </item>
-    <item android:state_enabled="true">
-        <shape>
-            <solid android:color="@color/color_FFFFFF" />
-            <corners android:radius="12dp" />
-            <stroke
-                android:width="1dp"
-                android:color="@color/color_FF00E0D7" />
-        </shape>
-    </item>
-</selector>

+ 0 - 10
module/account/src/main/res/drawable/account_select_account_last_ic_bg.xml

@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <gradient
-        android:angle="0"
-        android:endColor="@color/color_FFFB7658"
-        android:startColor="@color/color_FFFE983B"
-        android:type="linear" />
-    <corners android:radius="16dp" />
-</shape>

+ 14 - 0
module/account/src/main/res/layout/activity_register_profile.xml

@@ -0,0 +1,14 @@
+<?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="match_parent">
+
+    <androidx.fragment.app.FragmentContainerView
+        android:id="@+id/fl_content"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 77 - 0
module/account/src/main/res/layout/dialog_register_modify_avatar.xml

@@ -0,0 +1,77 @@
+<?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"
+    android:background="@drawable/common_bottom_dialog_bg"
+    android:paddingTop="6dp"
+    android:paddingBottom="12dp">
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_take_photo"
+        android:layout_width="0dp"
+        android:layout_height="42dp"
+        android:layout_marginHorizontal="16dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_take_photo"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <View
+        android:layout_width="0dp"
+        android:layout_height="1dp"
+        android:layout_marginHorizontal="16dp"
+        android:background="@color/color_FFF2F3F5"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_take_photo" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_from_album"
+        android:layout_width="0dp"
+        android:layout_height="42dp"
+        android:layout_marginHorizontal="16dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_from_album"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_take_photo" />
+
+    <View
+        android:layout_width="0dp"
+        android:layout_height="1dp"
+        android:layout_marginHorizontal="16dp"
+        android:background="@color/color_FFF2F3F5"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_from_album" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_use_default_avatar"
+        android:layout_width="0dp"
+        android:layout_height="42dp"
+        android:layout_marginHorizontal="16dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_use_default_avatar"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_from_album" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 186 - 0
module/account/src/main/res/layout/fragment_register_complete_userinfo.xml

@@ -0,0 +1,186 @@
+<?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"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/color_FFF1F2F5"
+    android:fitsSystemWindows="true">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:layout_constraintDimensionRatio="375:400"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/account_register_top_bg" />
+
+    <com.adealink.weparty.commonui.widget.CommonTopBar
+        android:id="@+id/top_bar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/common_top_bar_height"
+        app:bar_background="@color/transparent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_nice"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="22dp"
+        android:layout_marginTop="20dp"
+        android:ellipsize="end"
+        android:gravity="start"
+        android:includeFontPadding="false"
+        android:text="@string/common_hi"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="48sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/top_bar" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_complete_userinfo"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="22dp"
+        android:layout_marginTop="6dp"
+        android:ellipsize="end"
+        android:gravity="start"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_complete_userinfo"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="24sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_nice" />
+
+    <androidx.core.widget.NestedScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_complete_userinfo">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingBottom="60dp">
+
+            <!--头像-->
+            <com.adealink.weparty.commonui.imageview.AvatarView
+                android:id="@+id/iv_avatar"
+                android:layout_width="120dp"
+                android:layout_height="120dp"
+                android:layout_marginTop="50dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:roundingBorderColor="@color/white"
+                app:roundingBorderWidth="1dp" />
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:id="@+id/iv_modify_avatar"
+                android:layout_width="32dp"
+                android:layout_height="32dp"
+                app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
+                app:layout_constraintEnd_toEndOf="@id/iv_avatar"
+                app:srcCompat="@drawable/account_register_modify_avatar_ic" />
+
+            <!--昵称-->
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/cl_nick_name"
+                android:layout_width="match_parent"
+                android:layout_height="52dp"
+                android:layout_marginHorizontal="22dp"
+                android:layout_marginTop="16dp"
+                android:background="@drawable/account_register_complete_input_bg"
+                android:paddingHorizontal="16dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/iv_avatar">
+
+                <androidx.appcompat.widget.AppCompatEditText
+                    android:id="@+id/et_name_input"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@null"
+                    android:fontFamily="@font/poppins_semibold"
+                    android:includeFontPadding="false"
+                    android:textColor="@color/color_FF1D2129"
+                    android:textColorHint="@color/color_FFC9CDD4"
+                    android:textSize="16sp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_bias="0"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    tools:hint="test" />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <!--生日-->
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/cl_birthday"
+                android:layout_width="match_parent"
+                android:layout_height="52dp"
+                android:layout_marginHorizontal="22dp"
+                android:layout_marginTop="22dp"
+                android:background="@drawable/account_register_complete_input_bg"
+                android:paddingHorizontal="16dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/cl_nick_name">
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tv_birthday"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@null"
+                    android:fontFamily="@font/poppins_semibold"
+                    android:includeFontPadding="false"
+                    android:textColor="@color/color_FF1D2129"
+                    android:textSize="16sp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_bias="0"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    tools:hint="test" />
+
+                <androidx.appcompat.widget.AppCompatImageView
+                    android:id="@+id/iv_birthday_edit"
+                    android:layout_width="8dp"
+                    android:layout_height="8dp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    app:srcCompat="@drawable/account_register_birthday_edit_ic" />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </androidx.core.widget.NestedScrollView>
+
+
+    <com.adealink.weparty.commonui.widget.CommonButton
+        android:id="@+id/btn_next"
+        android:layout_width="0dp"
+        android:layout_height="@dimen/common_button_height"
+        android:layout_marginHorizontal="22dp"
+        android:layout_marginBottom="12dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_next"
+        android:textColor="@color/white"
+        android:textSize="16sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 168 - 0
module/account/src/main/res/layout/fragment_register_select_gender.xml

@@ -0,0 +1,168 @@
+<?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="match_parent"
+    android:background="@color/white"
+    android:fitsSystemWindows="true">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:layout_constraintDimensionRatio="375:400"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/account_register_top_bg" />
+
+    <com.adealink.weparty.commonui.widget.CommonTopBar
+        android:id="@+id/top_bar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/common_top_bar_height"
+        app:bar_background="@color/transparent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_hi"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="22dp"
+        android:layout_marginTop="20dp"
+        android:ellipsize="end"
+        android:gravity="start"
+        android:includeFontPadding="false"
+        android:text="@string/common_hi"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="48sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/top_bar" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_select_gender"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="22dp"
+        android:layout_marginTop="6dp"
+        android:ellipsize="end"
+        android:gravity="start"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_select_gender"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="24sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_hi" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_select_tips"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="22dp"
+        android:layout_marginTop="6dp"
+        android:ellipsize="end"
+        android:gravity="start"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_select_gender_tips"
+        android:textColor="@color/color_FF4E5969"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_select_gender" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_male"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="51dp"
+        app:layout_constraintEnd_toStartOf="@id/cl_female"
+        app:layout_constraintHorizontal_chainStyle="spread"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_select_tips">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_male"
+            android:layout_width="154dp"
+            android:layout_height="133dp"
+            android:layout_marginTop="44dp"
+            android:background="@drawable/account_register_gender_bg"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:paddingTop="65dp"
+            android:text="@string/common_male"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="24sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_male"
+            android:layout_width="109dp"
+            android:layout_height="109dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:srcCompat="@drawable/account_male_ic" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_female"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="51dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/cl_male"
+        app:layout_constraintTop_toBottomOf="@id/tv_select_tips">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_female"
+            android:layout_width="154dp"
+            android:layout_height="133dp"
+            android:layout_marginTop="44dp"
+            android:background="@drawable/account_register_gender_bg"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:paddingTop="65dp"
+            android:text="@string/common_female"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="24sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_female"
+            android:layout_width="109dp"
+            android:layout_height="109dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:srcCompat="@drawable/account_female_ic" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <com.adealink.weparty.commonui.widget.CommonButton
+        android:id="@+id/btn_next"
+        android:layout_width="0dp"
+        android:layout_height="@dimen/common_button_height"
+        android:layout_marginHorizontal="22dp"
+        android:layout_marginBottom="12dp"
+        android:enabled="false"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="@string/account_register_next"
+        android:textColor="@color/white"
+        android:textSize="16sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 8 - 114
module/account/src/main/res/values/strings.xml

@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <string name="account_login_app_name" translatable="false">YOKI</string>
-   <string name="account_login_net_error">Net request failed.</string>
    <string name="account_auth_error">Authorization failed, please try other login or connect vpn to retry</string>
    <string name="account_user_agreement_tips">Login means you agree %1$s and %2$s.</string>
    <string name="account_privacy_policy">Privacy Policy</string>
@@ -12,15 +11,6 @@
    <string name="account_fb">Facebook</string>
    <string name="account_google">Google</string>
    <string name="account_phone">Phone</string>
-   <string name="account_tiktok" translatable="false">Tiktok</string>
-   <string name="account_choose_gender">What\'s your gender?</string>
-   <string name="account_choose_birthday">What\'s your birthday?</string>
-   <string name="account_female">Female</string>
-   <string name="account_male">Male</string>
-   <string name="account_finish">Finish</string>
-   <string name="account_gender_can_not_modify">Cannot modify after select gender</string>
-   <string name="account_next">Next</string>
-   <string name="account_friend_recommend">Recommended friends</string>
    <string name="account_kick_off">Your Yoki account is logged in with %1$s on another device, if it is not your operation, please check whether the %2$s account is stolen immediately</string>
    <string name="account_token_expire">Login information is invalid. Please login again</string>
    <string name="account_feedback">Feedback</string>
@@ -38,17 +28,7 @@
    <string name="account_sign_up_or_login">Sign up/Log in</string>
    <string name="account_login">Log in</string>
    <string name="account_enter_password_tip">Please enter your password by</string>
-   <string name="account_password">Please enter password</string>
-   <string name="account_forget_password">Forgot Password?</string>
-   <string name="account_enter_verify_code">Enter Verification Code</string>
-   <string name="account_send_verify_code">Send SMS verification code to</string>
-   <string name="account_set_password">Set Password</string>
-   <string name="account_password_input_tip">Please set a password of 6-12 digits.</string>
    <string name="account_area_code" translatable="false">+%1$s</string>
-   <string name="account_confirm_phone_right">Please confirm phone number is right?\n\n%1$s</string>
-   <string name="account_send">Send</string>
-   <string name="account_resend">Resend</string>
-   <string name="account_resend_left_time">Resend %1$ss</string>
    <string name="account_choose_country">Select [Country/Region]</string>
    <string name="account_invalid_verify_code">Verify code is invalid</string>
    <string name="account_password_error">Password error</string>
@@ -59,99 +39,13 @@
    <string name="account_login_virtual_apk">Can\'t login with multiple apps</string>
    <string name="account_copy_device_id_success">Device ID copied to clipboard</string>
    <string name="account_copy_device_id_fail">Failed to obtain device ID</string>
-   <string name="account_login_email">Email &amp; Password Login</string>
-   <string name="account_login_email_hint">Enter your email</string>
-   <string name="account_login_confirm">Login</string>
-   <string name="account_login_forget">Forget password</string>
-   <string name="account_login_email_bind">Email Binding</string>
-   <string name="account_login_email_input">Input your Email</string>
-   <string name="account_login_email_input_hint">Please enter your email information to bind</string>
-   <string name="account_login_email_code_count" translatable="false">%1$ss</string>
-   <string name="account_login_email_set_password">Set a password</string>
-   <string name="account_login_email_set_password_warn">Contains both letters and numbers , no less than 6 digits and no more than 12 digits</string>
-   <string name="account_login_email_froget_account_point">Please enter your bound email account</string>
-   <string name="account_email_account_reminder">Account Reminder</string>
-   <string name="account_email_account_unbind_hint">Bind more login way, which can be used to login to avoid account loss</string>
-   <string name="account_email_account_bind_hint">The account that has been bound can be used for login</string>
-   <string name="account_email_str">Email</string>
-   <string name="account_email_bind_state_no_bind">No Binding</string>
-   <string name="account_email_bind_unbind">Unbind</string>
-   <string name="account_email_account_binding">Account Binding</string>
-   <string name="account_email_binding">Account Binding</string>
-   <string name="account_email_dialog_unbind_tips">Are you sure you to unbind your email?</string>
-   <string name="account_email_verify_code_hint">Input 6 digit code</string>
-   <string name="account_email_bind_state_bind">Binding</string>
-   <string name="account_email_bind_success">Email binding successful</string>
-   <string name="account_email_device_limit">Device operation limited</string>
-   <string name="account_phone_password_confirm_password_no_valid">The two entered passwords do not match</string>
-   <string name="account_enter_password">Enter Password</string>
-   <string name="account_enter_password_again">Enter Password again</string>
-   <string name="account_login_email_title">Email &amp; Password Login</string>
-   <string name="account_login_email_prompt">Enter the email and password you bound in %1$s Email Binding</string>
-   <string name="account_login_account_prompt">Email You Bound In %1$s</string>
-   <string name="account_login_password_prompt">Password For Email Binding</string>
-   <string name="account_login_email_password">Email &amp; Password Login</string>
-   <string name="account_login_email_code">Email &amp; Verification Code Login</string>
-   <string name="account_login_email_code_prompt">You should enter the email used by your Google. This email may not be the email you used in the %1$s Email Binding</string>
-   <string name="account_login_account_google_prompt">Email Used By Your Google</string>
-   <string name="account_login_account_google_code_prompt">Verification Code</string>
-   <string name="account_login_send_code_dialog_prompt">%1$s has sent a verification code to %2$s you can check it in this email,verification code is valid within 10 minutes.</string>
-   <string name="account_login_email_account_hint">Enter your email you bound in %1$s</string>
-   <string name="account_login_email_password_hint">The password for Email Binding</string>
-   <string name="account_login_email_account_google_hint">Enter email</string>
-   <string name="account_login_failed_prompt">Your password contains both letters and numbers,and is between 6 and 12 digits long</string>
-   <string name="account_email_bind_title">Email Setting</string>
-   <string name="account_email_password_title">Password Setting</string>
-   <string name="account_email_unregister">Email has not been registered yet, unable to log in</string>
-   <string name="account_email_deRegister">Account has been cancelled, temporarily unable to log in</string>
-   <string name="account_email_banned">Account has been banned, temporarily unable to log in</string>
-   <string name="account_select_account_mes_email" translatable="false">(%1$s)</string>
-   <string name="account_last_used">Last used</string>
-   <string name="account_select_account_title">Login with Facebook</string>
-   <string name="account_select_account_mes">Your Facebook account %1$s %2$s has created the following 2 accounts, please select the account you want to login</string>
-   <string name="account_phone_has_bind">This phone number has already been bound.</string>
-   <string name="account_mobile_login_title">Mobile login</string>
-   <string name="account_mobile_login_tips">Unregistered mobile numbers will be automatically registered</string>
-   <string name="account_complete_information_title">Complete information</string>
-   <string name="account_upload_avatar_tips">Show off your best selfie and make new friends effortlessly!</string>
-   <string name="account_login_name_input">Input your name</string>
-   <string name="account_date_of_birth">Birthday</string>
-   <string name="account_nation">Place of Birth</string>
-   <string name="account_length_tips">Nickname cannot exceed 28 characters</string>
-   <string name="account_toast_avatar">Please upload avatar</string>
-   <string name="account_toast_nickname">Please enter a nickname</string>
-   <string name="account_toast_nickname_illegal">The nickname contains invalid characters. Please modify and save.</string>
-   <string name="account_toast_birthday">Please select your birthday</string>
-   <string name="account_toast_country">Please select your country</string>
-   <string name="account_toast_gender">Please confirm your gender</string>
-   <string name="account_toast_gender_tips">Gender cannot be changed once registered.</string>
-   <string name="account_and_security">Account and Security</string>
-   <string name="account_management">Account Management</string>
-   <string name="account_user_id">User ID</string>
-   <string name="account_phone_binding">Phone binding</string>
-   <string name="account_password_setting">Password setting</string>
-   <string name="account_paassword_modification">Change Password</string>
-   <string name="account_binding">Account Binding</string>
-   <string name="account_no_protection">No protection</string>
-   <string name="account_change_mobile_phone">Change your phone number</string>
-   <string name="account_bind_phone_number_tips">Current bound phone number: %1$s</string>
-   <string name="account_change">Change</string>
-   <string name="account_delete_title">Delete Account</string>
-   <string name="account_delete_tips">Dear %1$s, you are about to start the Account Deletion process</string>
-   <string name="account_user_notices">User notice</string>
-   <string name="account_user_notices_list">1.Once your account is deleted, it cannot be recovered. After a successful deletion, you will lose access to and control over the account. All content, messages, and assets associated with the account will be permanently lost. If you register again, you will only obtain a new account.\n\n2.By voluntarily choosing to delete your account, you agree to forfeit all associated rights, including personal information, published content, coins, diamonds, as well as virtual asset benefits such as VIP status, wealth level, and charm level.\n\n3.If any unresolved disputes or issues (such as complaints, reports, or violations of laws and regulations) are detected during the deletion process, we reserve the right to refuse the deletion without seeking your further consent.\n\n4.Upon completion of the deletion process, Yoki APP will handle your personal information in accordance with legal requirements, which may include deletion or anonymization unless otherwise required by applicable laws and regulations.</string>
-   <string name="account_delete_dialog_tips">Are you sure you want to delete your account? If you delete your account, all your data will be cleared, and you will no longer be able to log in permanently. Please proceed with caution!</string>
-   <string name="account_delete_btn">Delete Account</string>
-   <string name="account_enter_old_password">Please enter your old password</string>
-   <string name="account_enter_new_password">Please enter your new password</string>
-   <string name="account_enter_your_passowrd">Please enter your password</string>
-   <string name="account_enter_your_passowrd_again">Please enter your password again</string>
-   <string name="account_send_to_whatsapp_tips">The verification code has been sent to whatsApp</string>
-   <string name="account_send_to_phone_tips">The verification code has been sent to your mobile</string>
-   <string name="account_mobile_bind_title">Phone number bind</string>
-   <string name="account_mobile_bind_tips">To ensure the security of your account, please bind your mobile number as soon as possible.</string>
-   <string name="account_bind_phone_first">Please bind your phone number first</string>
-   <string name="real_chats_real_sparks" translatable="false">Real Chats, Real Sparks</string>
    <string name="account_separator">,</string>
-   <string name="task_bind_phone_tips">Complete phone number binding +%1$s</string>
+   <string name="account_register_select_gender">选择你的性别</string>
+   <string name="account_register_select_gender_tips">注册成功后不可修改</string>
+   <string name="account_register_next">Next Step</string>
+   <string name="account_register_nice">Nice</string>
+   <string name="account_register_complete_userinfo">继续丰富你的形象</string>
+   <string name="account_register_take_photo">拍照</string>
+   <string name="account_register_from_album">从相册选择</string>
+   <string name="account_register_use_default_avatar">使用默认头像</string>
 </resources>

+ 13 - 1
module/account/src/main/res/values/style.xml

@@ -1,3 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
+
+    <style name="RegisterEditText">
+        <item name="android:textColor">@color/color_FF1D2129</item>
+        <item name="android:textColorHint">@color/color_FFCDCFD9</item>
+        <item name="android:textSize">14sp</item>
+        <item name="android:paddingStart">12dp</item>
+        <item name="android:paddingEnd">12dp</item>
+        <item name="android:fontFamily">@font/poppins_semibold</item>
+        <item name="android:includeFontPadding">false</item>
+        <item name="android:background">@drawable/common_input_edit_bg</item>
+    </style>
+
 </resources>

+ 4 - 1
module/activity/src/main/java/com/adealink/weparty/activity/ActivityServiceImpl.kt

@@ -4,7 +4,6 @@ import com.adealink.frame.spi.RegisterService
 import com.adealink.weparty.App
 import com.adealink.weparty.activity.datasource.remote.ActivityHttpService
 import com.adealink.weparty.module.activity.IActivityService
-import com.adealink.weparty.module.playmate.IPlaymateService
 
 @RegisterService(IActivityService::class)
 class ActivityServiceImpl : IActivityService {
@@ -18,4 +17,8 @@ class ActivityServiceImpl : IActivityService {
         return this
     }
 
+    override fun logout() {
+
+    }
+
 }

+ 4 - 0
module/im/src/main/java/com/adealink/weparty/im/IMServiceImpl.kt

@@ -26,4 +26,8 @@ class IMServiceImpl : IIMService {
     override fun getService(): IMServiceImpl {
         return this
     }
+
+    override fun logout() {
+
+    }
 }

+ 3 - 0
module/order/src/main/java/com/adealink/weparty/order/OrderServiceImpl.kt

@@ -6,6 +6,9 @@ import com.adealink.weparty.module.order.IOrderService
 @RegisterService(IOrderService::class)
 class OrderServiceImpl : IOrderService {
 
+    override fun logout() {
+        TODO("Not yet implemented")
+    }
 
     override fun getService(): IOrderService {
         return this

+ 4 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/PlaymateServiceImpl.kt

@@ -25,4 +25,8 @@ class PlaymateServiceImpl : IPlaymateService {
         return ViewModelProvider(owner)[PlaymateViewModel::class.java]
     }
 
+    override fun logout() {
+
+    }
+
 }

+ 4 - 0
module/setting/src/main/java/com/adealink/weparty/setting/SettingServiceImpl.kt

@@ -17,5 +17,9 @@ class SettingServiceImpl : ISettingService {
         return this
     }
 
+    override fun logout() {
+
+    }
+
 
 }

+ 8 - 4
module/share/src/main/java/com/adealink/weparty/share/ShareServiceImpl.kt

@@ -2,19 +2,23 @@ package com.adealink.weparty.share
 
 import com.adealink.frame.spi.RegisterService
 import com.adealink.weparty.App
-import com.adealink.weparty.module.activity.IActivityService
+import com.adealink.weparty.module.share.IShareService
 import com.adealink.weparty.share.datasource.remote.ShareHttpService
 
-@RegisterService(IActivityService::class)
-class ShareServiceImpl : IActivityService {
+@RegisterService(IShareService::class)
+class ShareServiceImpl : IShareService {
 
     private val shareHttpService by lazy {
         App.instance.networkService.getHttpService(ShareHttpService::class.java)
     }
 
 
-    override fun getService(): IActivityService {
+    override fun getService(): IShareService {
         return this
     }
 
+    override fun logout() {
+
+    }
+
 }

+ 3 - 0
module/wallet/src/main/java/com/adealink/weparty/wallet/WalletServiceImpl.kt

@@ -6,6 +6,9 @@ import com.adealink.weparty.module.wallet.IWalletService
 @RegisterService(IWalletService::class)
 class WalletServiceImpl : IWalletService {
 
+    override fun logout() {
+    }
+
 
     override fun getService(): IWalletService {
         return this