Browse Source

添加sdk外部接口,海南元游UI界面。

kaiweicai 2 years ago
parent
commit
6d38e2e0e7
100 changed files with 4445 additions and 483 deletions
  1. 4 14
      demo/build.gradle
  2. 7 2
      demo/src/main/AndroidManifest.xml
  3. 298 16
      demo/src/main/java/com/yyxx/commsdk/demo/DemoActivity.kt
  4. 3 0
      demo/src/main/java/com/yyxx/commsdk/demo/Item.kt
  5. 0 69
      demo/src/main/res/layout-w1240dp/activity_login.xml
  6. 0 76
      demo/src/main/res/layout-w936dp/activity_login.xml
  7. 0 68
      demo/src/main/res/layout/activity_login.xml
  8. 0 28
      demo/src/main/res/navigation/nav_graph.xml
  9. 0 28
      demo/src/main/res/navigation/nav_graph2.xml
  10. 0 4
      demo/src/main/res/values-land/dimens.xml
  11. 0 4
      demo/src/main/res/values-w1240dp/dimens.xml
  12. 0 4
      demo/src/main/res/values-w600dp/dimens.xml
  13. 0 10
      demo/src/main/res/values/colors.xml
  14. 0 6
      demo/src/main/res/values/dimens.xml
  15. 0 17
      demo/src/main/res/values/strings.xml
  16. 0 5
      demo/src/main/res/values/styles.xml
  17. 0 13
      demo/src/main/res/values/themes.xml
  18. 2 2
      gradle.properties
  19. 1 1
      library_base/build.gradle
  20. 55 16
      library_base/src/main/java/cn/yyxx/commsdk/base/YYXXCommSdk.java
  21. 7 1
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/Function.java
  22. 7 0
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/ResultInfo.java
  23. 169 0
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkChargeInfo.java
  24. 151 0
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkRoleInfo.java
  25. 2 2
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/IMsaDeviceCallback.java
  26. 5 1
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IFeature.java
  27. 6 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/ILifeCycle.java
  28. 3 0
      library_channel/build.gradle
  29. 22 7
      library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelSdkImpl.java
  30. 14 1
      library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/ChannelSdkYYXX.java
  31. 4 2
      library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/msa/MsaDeviceHandler.java
  32. 0 1
      library_core/build.gradle
  33. 20 9
      library_core/src/main/java/cn/yyxx/commsdk/core/SdkBridge.java
  34. 133 39
      library_core/src/main/java/cn/yyxx/commsdk/core/common/CommonOperationManager.java
  35. 10 0
      library_core/src/main/java/cn/yyxx/commsdk/core/entry/ComponentLoginConfig.java
  36. 152 0
      library_core/src/main/java/cn/yyxx/commsdk/core/entry/bean/InitBean.java
  37. 118 5
      library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkBridgeImpl.java
  38. 58 0
      library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkProxyManager.java
  39. 1 1
      library_core/src/main/java/cn/yyxx/commsdk/core/ui/dialog/PrivacyPolicyDialog.java
  40. 8 2
      library_core/src/main/java/cn/yyxx/commsdk/core/utils/MMKVUtils.java
  41. 0 29
      library_core/src/main/java/cn/yyxx/commsdk/core/utils/SharedPreferencesUtils.java
  42. 2 0
      library_core/src/main/res/values/yyxx_comm_strings.xml
  43. 8 0
      library_platform/build.gradle
  44. 9 0
      library_platform/src/main/AndroidManifest.xml
  45. 125 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/BaseLoginActivity.java
  46. 20 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/PlatformSdk.java
  47. 60 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/HNYYLoginActivity.java
  48. 16 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/HNYYLoginFragmentTag.java
  49. 57 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/BaseFragment.java
  50. 41 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/FragmentUtils.java
  51. 151 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserAccountLoginFragment.java
  52. 208 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserPhoneLoginFragment.java
  53. 157 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserPhoneLoginSetpwdFragment.java
  54. 178 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserRegisterFragment.java
  55. 168 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserRetrievePwdFragment.java
  56. 82 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserSwitchAccountLoginFragment.java
  57. 57 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/widget/TosUtil.java
  58. 41 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/user/UserSession.java
  59. 201 0
      library_platform/src/main/java/cn/yyxx/commsdk/platform/user/UserSessionManager.java
  60. 11 0
      library_platform/src/main/res/anim/hnyy_rotate_anim.xml
  61. 12 0
      library_platform/src/main/res/drawable/hnyy_btn_account_bg.xml
  62. 12 0
      library_platform/src/main/res/drawable/hnyy_btn_exit_bg.xml
  63. 13 0
      library_platform/src/main/res/drawable/hnyy_btn_guest_bg.xml
  64. 7 0
      library_platform/src/main/res/drawable/hnyy_checkbox_select.xml
  65. 5 0
      library_platform/src/main/res/drawable/hnyy_color_white_40.xml
  66. 5 0
      library_platform/src/main/res/drawable/hnyy_color_white_70.xml
  67. 6 0
      library_platform/src/main/res/drawable/hnyy_common_wv_bg.xml
  68. 5 0
      library_platform/src/main/res/drawable/hnyy_dialog_ios_bg.xml
  69. 13 0
      library_platform/src/main/res/drawable/hnyy_edittext_bg.xml
  70. 9 0
      library_platform/src/main/res/drawable/hnyy_exit_bg.xml
  71. 13 0
      library_platform/src/main/res/drawable/hnyy_game_float_menu_bg.xml
  72. 11 0
      library_platform/src/main/res/drawable/hnyy_hide_float_view_bg.xml
  73. 9 0
      library_platform/src/main/res/drawable/hnyy_login_bg.xml
  74. 12 0
      library_platform/src/main/res/drawable/hnyy_login_button_grayed_style.xml
  75. 12 0
      library_platform/src/main/res/drawable/hnyy_login_button_style.xml
  76. 5 0
      library_platform/src/main/res/drawable/hnyy_login_list_bg.xml
  77. 8 0
      library_platform/src/main/res/drawable/hnyy_login_list_btn_yellow_bg.xml
  78. 7 0
      library_platform/src/main/res/drawable/hnyy_login_list_delete_bg.xml
  79. 16 0
      library_platform/src/main/res/drawable/hnyy_progress_drawable_white.xml
  80. 10 0
      library_platform/src/main/res/drawable/hnyy_radius_white_10dp.xml
  81. 10 0
      library_platform/src/main/res/drawable/hnyy_radius_white_12dp.xml
  82. 8 0
      library_platform/src/main/res/drawable/hnyy_radius_white_1dp.xml
  83. 164 0
      library_platform/src/main/res/layout/hnyy_account_login.xml
  84. 24 0
      library_platform/src/main/res/layout/hnyy_dialog_progress.xml
  85. 45 0
      library_platform/src/main/res/layout/hnyy_edittext_style.xml
  86. 42 0
      library_platform/src/main/res/layout/hnyy_email_dialog.xml
  87. 72 0
      library_platform/src/main/res/layout/hnyy_exit_game_dialog.xml
  88. 16 0
      library_platform/src/main/res/layout/hnyy_hide_float_view.xml
  89. 45 0
      library_platform/src/main/res/layout/hnyy_ios_style_dialog.xml
  90. 7 0
      library_platform/src/main/res/layout/hnyy_login.xml
  91. 12 0
      library_platform/src/main/res/layout/hnyy_login_activity.xml
  92. 62 0
      library_platform/src/main/res/layout/hnyy_login_list.xml
  93. 39 0
      library_platform/src/main/res/layout/hnyy_p_webview.xml
  94. 202 0
      library_platform/src/main/res/layout/hnyy_phone_login.xml
  95. 145 0
      library_platform/src/main/res/layout/hnyy_phone_register_setpwd_dialog.xml
  96. 81 0
      library_platform/src/main/res/layout/hnyy_privacy_policy_dialog.xml
  97. 25 0
      library_platform/src/main/res/layout/hnyy_quick_login_bar.xml
  98. 211 0
      library_platform/src/main/res/layout/hnyy_register_dialog.xml
  99. 178 0
      library_platform/src/main/res/layout/hnyy_retrieve_pwd.xml
  100. 15 0
      library_platform/src/main/res/layout/hnyy_show_splash_view.xml

+ 4 - 14
demo/build.gradle

@@ -66,21 +66,11 @@ android {
             }
         }
     }
-    buildFeatures {
-        viewBinding true
-    }
+   
 }
 
 dependencies {
     implementation project(path: ':library_core')
-    implementation 'androidx.appcompat:appcompat:1.3.0'
-    implementation 'com.google.android.material:material:1.4.0'
-    implementation 'androidx.annotation:annotation:1.2.0'
-    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
-    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
-    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
-    implementation 'androidx.navigation:navigation-fragment:2.3.5'
-    implementation 'androidx.navigation:navigation-ui:2.3.5'
-    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8.1'
-    apply plugin: 'kotlin-android-extensions'
-}
+    implementation project(path: ':library_channel')
+    implementation project(path: ':library_platform')
+ }

+ 7 - 2
demo/src/main/AndroidManifest.xml

@@ -13,18 +13,23 @@
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 
+
+    <!-- 权限测试 -->
+    <uses-permission android:name="android.permission.CAMERA" />
+
+
     <application
         android:name="cn.yyxx.commsdk.base.YYXXApplication"
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
-        android:supportsRtl="true" >
+        android:supportsRtl="true">
         <activity
             android:name=".SplashActivity"
             android:exported="true"
             android:screenOrientation="landscape"
             android:label="@string/app_name"
-            android:theme="@style/Theme.Design.NoActionBar" >
+            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 

+ 298 - 16
demo/src/main/java/com/yyxx/commsdk/demo/DemoActivity.kt

@@ -1,20 +1,29 @@
 package com.yyxx.commsdk.demo
 
 import android.app.Activity
+import android.app.AlertDialog
+import android.content.DialogInterface
 import android.content.Intent
+import android.content.res.Configuration
 import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.text.InputType
+import android.view.KeyEvent
 
 import android.view.View
+import android.widget.*
 import cn.yyxx.commsdk.base.YYXXCommSdk
+import cn.yyxx.commsdk.base.entity.ResultInfo
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo
+import cn.yyxx.commsdk.base.entity.SdkRoleInfo
 import cn.yyxx.commsdk.base.internal.ICallback
 
 
-import cn.yyxx.commsdk.base.internal.IRequestCallback
-
-
-import cn.yyxx.commsdk.core.network.SdkRequest
 import cn.yyxx.support.hawkeye.ToastUtils
-import kotlinx.android.synthetic.main.activity_login.*
+import cn.yyxx.support.permission.Permission
+import org.json.JSONObject
 
 
 /**
@@ -23,35 +32,308 @@ import kotlinx.android.synthetic.main.activity_login.*
  */
 class DemoActivity : Activity(), View.OnClickListener {
 
-    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
-        super.onActivityResult(requestCode, resultCode, data)
-    }
+    private val events = arrayListOf(
+        Item(0, "00 接口环境切换"),
+        Item(1, "01 登录"),
+        Item(2, "02 登出"),
+        Item(3, "03 角色创建上报"),
+        Item(4, "04 角色登录上报"),
+        Item(5, "05 角色升级上报"),
+        Item(6, "06 定额充值"),
+        Item(7, "07 权限申请测试"),
+        Item(8, "08 上报游戏事件"),
+    )
 
-    override fun onNewIntent(intent: Intent?) {
-        super.onNewIntent(intent)
+    private lateinit var layout: LinearLayout
+    private lateinit var mTextView: TextView
+    private lateinit var mEditText: EditText
+
+    private var cacheRoleInfo: SdkRoleInfo? = null
+
+
+    private val handler = object : Handler(Looper.getMainLooper()) {
+        override fun handleMessage(msg: Message) {
+            when (msg.what) {
+                10001 -> {
+                    with(mTextView) {
+                        text = text.toString() + msg.obj.toString()
+                    }
+                }
+            }
+        }
     }
 
+
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        setContentView(R.layout.activity_login)
+        initView()
+
+        YYXXCommSdk.getInstance().initialize(this,object: ICallback{
+            override fun onResult(code: Int, result: String?) {
 
-        login.setOnClickListener(this@DemoActivity)
+                ToastUtils.toastInfo(this@DemoActivity,"code:$code   msg:$result")
+            }
+        })
 
-        YYXXCommSdk.getInstance().initialize(this,true,object: ICallback{
+        YYXXCommSdk.getInstance().setLogoutListener(this,object :ICallback{
             override fun onResult(code: Int, result: String?) {
+                if (code == ResultInfo.CODE_SUCCESS){
+                    ToastUtils.toastInfo(this@DemoActivity, "退出成功,执行游戏注销")
 
-                ToastUtils.toastInfo(this@DemoActivity,"code:\$code   msg:$result")
+                }
             }
         })
 
+        YYXXCommSdk.getInstance().onCreate(this,savedInstanceState)
+
+    }
+
+
+
+    private fun initView() {
+        layout = LinearLayout(this)
+        layout.orientation = LinearLayout.VERTICAL
+        initButton()
+        mTextView = TextView(this)
+        with(mTextView) {
+            text = ""
+            this@DemoActivity.layout.addView(this)
+        }
+        val scrollView = ScrollView(this)
+        scrollView.addView(layout)
+        setContentView(scrollView)
     }
 
+    private fun initButton() {
+        for (event in events) {
+            with(Button(this)) {
+                text = event.name
+                tag = event.id
+                id = event.id
+                setOnClickListener(this@DemoActivity)
+                this@DemoActivity.layout.addView(this)
+                if (id == 5) {
+                    mEditText = EditText(this@DemoActivity)
+                    mEditText.hint = "请输入金额,单位分"
+                    mEditText.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_CLASS_PHONE
+                    mEditText.setText("100")
+                    this@DemoActivity.layout.addView(mEditText)
+                }
+            }
+        }
+    }
 
 
     override fun onClick(v: View?) {
-        v?.apply{
-            SdkRequest.getInstance().initAgreement(this@DemoActivity, IRequestCallback {
+        v?.apply {
+            when (tag as Int) {
+                0 -> {
+
+                }
+                1 -> {
+                     YYXXCommSdk.getInstance().login(this@DemoActivity){code,result->
+                         if (code == ResultInfo.CODE_SUCCESS){
+
+                         }
+                     }
+                }
+                2 -> {
+                    YYXXCommSdk.getInstance().logout()
+                }
+                3 -> {
+                    YYXXCommSdk.getInstance().roleCreate(this@DemoActivity,getGameRoleInfo()) { code, result ->
+                        if (code == ResultInfo.CODE_SUCCESS) {
+
+                        }
+                    }
+                }
+                4 -> {
+                    YYXXCommSdk.getInstance().roleLauncher(this@DemoActivity,getGameRoleInfo()) { code, result ->
+                        if (code == ResultInfo.CODE_SUCCESS) {
+
+                        }
+                    }
+                }
+                5 -> {
+                    YYXXCommSdk.getInstance().roleUpgrade(this@DemoActivity,getGameRoleInfo()) { code, result ->
+                        if (code == ResultInfo.CODE_SUCCESS) {
+
+                        }
+                    }
+
+                }
+                6 -> {
+
+                    if (cacheRoleInfo == null) {
+                        ToastUtils.toastInfo(this@DemoActivity, "请先创建/登录角色")
+                        return
+                    }
+
+                    YYXXCommSdk.getInstance().charge(this@DemoActivity,getGameChargeRoleInfo(),{code,result->
+                        if (code == ResultInfo.CODE_SUCCESS){
+
+                        }
+                    })
+                }
+                7 -> {
+                    YYXXCommSdk.getInstance().requestPermission(this@DemoActivity, mutableListOf(Permission.CAMERA)){code,result->
+                        ToastUtils.toastInfo(this@DemoActivity, "requestPermission code: $code, result: $result")
+
+                    }
+                }
+                8 ->{
+                    YYXXCommSdk.getInstance().reportGameEvent("主线任务1", getGameEvent());
+                }
+
+            }
+        }
+
+
+
+    }
+
+
+
+    override fun onStart() {
+        super.onStart()
+        YYXXCommSdk.getInstance().onStart(this)
+    }
+
+    override fun onRestart() {
+        super.onRestart()
+        YYXXCommSdk.getInstance().onRestart(this)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        YYXXCommSdk.getInstance().onResume(this)
+    }
+
+    override fun onPause() {
+        super.onPause()
+        YYXXCommSdk.getInstance().onPause(this)
+    }
+    override fun onStop() {
+        super.onStop()
+        YYXXCommSdk.getInstance().onStop(this)
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        YYXXCommSdk.getInstance().onDestroy(this)
+    }
+
+    override fun onRequestPermissionsResult(
+        requestCode: Int,
+        permissions: Array<out String>,
+        grantResults: IntArray
+    ) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        YYXXCommSdk.getInstance().onRequestPermissionsResult(requestCode,permissions,grantResults)
+    }
+
+    override fun onConfigurationChanged(newConfig: Configuration) {
+        super.onConfigurationChanged(newConfig)
+        YYXXCommSdk.getInstance().onConfigurationChanged(this,newConfig)
+    }
+    override fun onWindowFocusChanged(hasFocus: Boolean) {
+        super.onWindowFocusChanged(hasFocus)
+        YYXXCommSdk.getInstance().onWindowFocusChanged(this,hasFocus)
+    }
+
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+        YYXXCommSdk.getInstance().onActivityResult(this,requestCode,resultCode,data)
+    }
+
+    override fun onNewIntent(intent: Intent?) {
+        super.onNewIntent(intent)
+        YYXXCommSdk.getInstance().onNewIntent(this,intent)
+    }
+
+
+    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+        if (keyCode == KeyEvent.KEYCODE_BACK){
+            YYXXCommSdk.getInstance().openExitView(this,object :ICallback{
+                override fun onResult(code: Int, result: String?) {
+                    if (code == ResultInfo.CODE_SUCCESS){
+                        if (YYXXCommSdk.getInstance().hasExitView(this@DemoActivity)){
+                            val msg = "是否关闭游戏?"
+                            AlertDialog.Builder(this@DemoActivity)
+                                .setMessage(msg)
+                                .setTitle("温馨提示")
+                                .setPositiveButton("确定",DialogInterface.OnClickListener(){_,_->
+                                    finish()
+                                })
+                                .setNegativeButton("取消",null)
+                                .create()
+                                .show()
+
+                        }else{
+                            finish()
+                        }
+
+                    }
+
+
+                }
             })
+            return true
+
         }
+        return super.onKeyDown(keyCode, event)
+    }
+    private fun getGameRoleInfo(): SdkRoleInfo {
+        val roleInfo = SdkRoleInfo()
+        roleInfo.serverId = "102201"
+        roleInfo.serverName = "霸天1服"
+        roleInfo.roleId ="101"
+        roleInfo.roleName = "虚空"
+        roleInfo.roleLevel = "100"
+        roleInfo.gender = "男"
+        roleInfo.hasGold  = "100"
+        roleInfo.charge = "10"
+        roleInfo.vipLevel = "1"
+        roleInfo.partyId  = "3399"
+        roleInfo.partyName = "子湖"
+        roleInfo.reincarnationCount = "0"
+        cacheRoleInfo = roleInfo
+        return roleInfo
+    }
+
+
+    public fun getGameEvent():JSONObject{
+        var json = JSONObject();
+        json.put("坐骑支线","坐骑获取成功")
+        json.put("武器支线","武器获取成功")
+        return  json
     }
+    private fun getGameChargeRoleInfo():SdkChargeInfo{
+        val chargeInfo = SdkChargeInfo()
+        var  time = System.currentTimeMillis() / 1000
+        chargeInfo.count = "10"
+        chargeInfo.ext = "$time"
+        chargeInfo.game_no = "$time"
+        chargeInfo.count = "10"
+        chargeInfo.hasGold = "80"
+        chargeInfo.order_desc = "购买10元宝"
+        chargeInfo.product_name = "购买10元宝"
+        chargeInfo.party_name = "霸天"
+        chargeInfo.party_id = "11"
+        chargeInfo.product_id = "299"
+        chargeInfo.pay_money = "100"
+        chargeInfo.radio = "10"
+        chargeInfo.reincarnationCount = "0"
+        chargeInfo.product_name = "元宝"
+        chargeInfo.role_id = "133"
+        chargeInfo.role_level = "30"
+        chargeInfo.role_name = "可爱小呆瓜"
+        chargeInfo.server_id = "100"
+        chargeInfo.server_name = "惊天1服"
+        chargeInfo.vip_level = "0"
+
+        return chargeInfo
+    }
+
 }

+ 3 - 0
demo/src/main/java/com/yyxx/commsdk/demo/Item.kt

@@ -0,0 +1,3 @@
+package com.yyxx.commsdk.demo
+
+data class Item(val id:Int,var name: String)

+ 0 - 69
demo/src/main/res/layout-w1240dp/activity_login.xml

@@ -1,69 +0,0 @@
-<?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:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    tools:context=".ui.login.LoginActivity">
-
-    <EditText
-        android:id="@+id/username"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="96dp"
-        android:hint="@string/prompt_email"
-        android:inputType="textEmailAddress"
-        android:selectAllOnFocus="true"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <EditText
-        android:id="@+id/password"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        android:hint="@string/prompt_password"
-        android:imeActionLabel="@string/action_sign_in_short"
-        android:imeOptions="actionDone"
-        android:inputType="textPassword"
-        android:selectAllOnFocus="true"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/username" />
-
-    <Button
-        android:id="@+id/login"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="start"
-        android:layout_marginTop="16dp"
-        android:layout_marginBottom="64dp"
-        android:enabled="false"
-        android:text="@string/action_sign_in"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/password"
-        app:layout_constraintVertical_bias="0.2" />
-
-    <ProgressBar
-        android:id="@+id/loading"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:layout_marginTop="64dp"
-        android:layout_marginBottom="64dp"
-        android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="@+id/password"
-        app:layout_constraintStart_toStartOf="@+id/password"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_bias="0.3" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 0 - 76
demo/src/main/res/layout-w936dp/activity_login.xml

@@ -1,76 +0,0 @@
-<?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:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    tools:context=".ui.login.LoginActivity">
-
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="840dp"
-        android:layout_height="match_parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent">
-
-        <EditText
-            android:id="@+id/username"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="96dp"
-            android:hint="@string/prompt_email"
-            android:inputType="textEmailAddress"
-            android:selectAllOnFocus="true"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <EditText
-            android:id="@+id/password"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="8dp"
-            android:hint="@string/prompt_password"
-            android:imeActionLabel="@string/action_sign_in_short"
-            android:imeOptions="actionDone"
-            android:inputType="textPassword"
-            android:selectAllOnFocus="true"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/username" />
-
-        <Button
-            android:id="@+id/login"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="start"
-            android:layout_marginTop="16dp"
-            android:layout_marginBottom="64dp"
-            android:enabled="false"
-            android:text="@string/action_sign_in"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/password"
-            app:layout_constraintVertical_bias="0.2" />
-
-        <ProgressBar
-            android:id="@+id/loading"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:layout_marginTop="64dp"
-            android:layout_marginBottom="64dp"
-            android:visibility="gone"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="@+id/password"
-            app:layout_constraintStart_toStartOf="@+id/password"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintVertical_bias="0.3" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 0 - 68
demo/src/main/res/layout/activity_login.xml

@@ -1,68 +0,0 @@
-<?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:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    tools:context=".ui.login.LoginActivity">
-
-    <EditText
-        android:id="@+id/username"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="96dp"
-        android:hint="@string/prompt_email"
-        android:inputType="textEmailAddress"
-        android:selectAllOnFocus="true"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <EditText
-        android:id="@+id/password"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        android:hint="@string/prompt_password"
-        android:imeActionLabel="@string/action_sign_in_short"
-        android:imeOptions="actionDone"
-        android:inputType="textPassword"
-        android:selectAllOnFocus="true"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/username" />
-
-    <Button
-        android:id="@+id/login"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="start"
-        android:layout_marginTop="16dp"
-        android:layout_marginBottom="64dp"
-        android:text="@string/action_sign_in"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/password"
-        app:layout_constraintVertical_bias="0.2" />
-
-    <ProgressBar
-        android:id="@+id/loading"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:layout_marginTop="64dp"
-        android:layout_marginBottom="64dp"
-        android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="@+id/password"
-        app:layout_constraintStart_toStartOf="@+id/password"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_bias="0.3" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 0 - 28
demo/src/main/res/navigation/nav_graph.xml

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<navigation 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:id="@+id/nav_graph"
-    app:startDestination="@id/FirstFragment">
-
-    <fragment
-        android:id="@+id/FirstFragment"
-        android:name="com.yyxx.commsdk.demo.ui.FirstFragment"
-        android:label="@string/first_fragment_label"
-        tools:layout="@layout/fragment_first">
-
-        <action
-            android:id="@+id/action_FirstFragment_to_SecondFragment"
-            app:destination="@id/SecondFragment" />
-    </fragment>
-    <fragment
-        android:id="@+id/SecondFragment"
-        android:name="com.yyxx.commsdk.demo.ui.SecondFragment"
-        android:label="@string/second_fragment_label"
-        tools:layout="@layout/fragment_second">
-
-        <action
-            android:id="@+id/action_SecondFragment_to_FirstFragment"
-            app:destination="@id/FirstFragment" />
-    </fragment>
-</navigation>

+ 0 - 28
demo/src/main/res/navigation/nav_graph2.xml

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<navigation 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:id="@+id/nav_graph2"
-    app:startDestination="@id/FirstFragment">
-
-    <fragment
-        android:id="@+id/FirstFragment"
-        android:name="com.yyxx.commsdk.demo.ui.FirstFragment"
-        android:label="@string/first_fragment_label"
-        tools:layout="@layout/fragment_first">
-
-        <action
-            android:id="@+id/action_FirstFragment_to_SecondFragment"
-            app:destination="@id/SecondFragment" />
-    </fragment>
-    <fragment
-        android:id="@+id/SecondFragment"
-        android:name="com.yyxx.commsdk.demo.ui.SecondFragment"
-        android:label="@string/second_fragment_label"
-        tools:layout="@layout/fragment_second">
-
-        <action
-            android:id="@+id/action_SecondFragment_to_FirstFragment"
-            app:destination="@id/FirstFragment" />
-    </fragment>
-</navigation>

+ 0 - 4
demo/src/main/res/values-land/dimens.xml

@@ -1,4 +0,0 @@
-<resources>
-    <dimen name="activity_horizontal_margin">48dp</dimen>
-    <dimen name="fab_margin">48dp</dimen>
-</resources>

+ 0 - 4
demo/src/main/res/values-w1240dp/dimens.xml

@@ -1,4 +0,0 @@
-<resources>
-    <dimen name="activity_horizontal_margin">200dp</dimen>
-    <dimen name="fab_margin">200dp</dimen>
-</resources>

+ 0 - 4
demo/src/main/res/values-w600dp/dimens.xml

@@ -1,4 +0,0 @@
-<resources>
-    <dimen name="activity_horizontal_margin">48dp</dimen>
-    <dimen name="fab_margin">48dp</dimen>
-</resources>

+ 0 - 10
demo/src/main/res/values/colors.xml

@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <color name="purple_200">#FFBB86FC</color>
-    <color name="purple_500">#FF6200EE</color>
-    <color name="purple_700">#FF3700B3</color>
-    <color name="teal_200">#FF03DAC5</color>
-    <color name="teal_700">#FF018786</color>
-    <color name="black">#FF000000</color>
-    <color name="white">#FFFFFFFF</color>
-</resources>

+ 0 - 6
demo/src/main/res/values/dimens.xml

@@ -1,6 +0,0 @@
-<resources>
-    <!-- Default screen margins, per the Android Design guidelines. -->
-    <dimen name="activity_horizontal_margin">16dp</dimen>
-    <dimen name="activity_vertical_margin">16dp</dimen>
-    <dimen name="fab_margin">16dp</dimen>
-</resources>

+ 0 - 17
demo/src/main/res/values/strings.xml

@@ -1,21 +1,4 @@
 <resources>
     <string name="app_name">融合通用SDK</string>
-    <string name="title_activity_login">LoginActivity</string>
-    <string name="prompt_email">Email</string>
-    <string name="prompt_password">Password</string>
-    <string name="action_sign_in">Sign in or register</string>
-    <string name="action_sign_in_short">Sign in</string>
-    <string name="welcome">"Welcome !"</string>
-    <string name="invalid_username">Not a valid username</string>
-    <string name="invalid_password">Password must be >5 characters</string>
-    <string name="login_failed">"Login failed"</string>
-    <string name="title_activity_splash">Splash</string>
-    <!-- Strings used for fragments for navigation -->
-    <string name="first_fragment_label">First Fragment</string>
-    <string name="second_fragment_label">Second Fragment</string>
-    <string name="next">Next</string>
-    <string name="previous">Previous</string>
 
-    <string name="hello_first_fragment">Hello first fragment</string>
-    <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
 </resources>

+ 0 - 5
demo/src/main/res/values/styles.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <!-- Base application theme. -->
-    <style name="AppTheme" parent="android:Theme.Light.NoTitleBar.Fullscreen" />
-</resources>

+ 0 - 13
demo/src/main/res/values/themes.xml

@@ -1,13 +0,0 @@
-<resources>
-
-    <style name="Theme.YYXXCommSdk" parent="Theme.MaterialComponents.Light" />
-
-    <style name="Theme.YYXXCommSdk.NoActionBar">
-        <item name="windowActionBar">false</item>
-        <item name="windowNoTitle">true</item>
-    </style>
-
-    <style name="Theme.YYXXCommSdk.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
-
-    <style name="Theme.YYXXCommSdk.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
-</resources>

+ 2 - 2
gradle.properties

@@ -12,9 +12,9 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 # org.gradle.parallel=true
 android.injected.testOnly=false
-android.useAndroidX=true
+android.useAndroidX=false
 # Automatically convert third-party libraries to use AndroidX
-android.enableJetifier=true
+android.enableJetifier=false
 # Kotlin code style for this project: "official" or "obsolete":
 kotlin.code.style=official
 org.gradle.parallel=true

+ 1 - 1
library_base/build.gradle

@@ -36,7 +36,7 @@ dependencies {
     api files('../libs/dolin_zap_1.0.0.jar')
     api files('../libs/yyxx_support_1.0.2.jar')
 //    api files('../libs/ali_authsdk_2.12.1.jar')
-//    api files('../libs/android-support-v4.jar')
+    api files('../libs/android-support-v4.jar')
 }
 
 //apply from: 'buildJar.gradle'

+ 55 - 16
library_base/src/main/java/cn/yyxx/commsdk/base/YYXXCommSdk.java

@@ -6,9 +6,12 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.os.Build;
+import android.os.Bundle;
 import android.text.TextUtils;
 import android.webkit.WebView;
 
+import org.json.JSONObject;
+
 import java.util.List;
 
 import cn.yyxx.commsdk.Version;
@@ -126,14 +129,27 @@ public final class YYXXCommSdk {
 
     }
 
+    /**
+     *
+     * @param activity
+     * @param savedInstanceState
+     */
+    public void onCreate(Activity activity, Bundle savedInstanceState){
+
+        if (checkSdkBridgeNull(Function.ON_CREATE, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_CREATE, new Class[]{Activity.class, Bundle.class}, new Object[]{activity, savedInstanceState});
+
+    }
     /**
      * SDK初始化
      *
      * @param activity    Activity上下文
-     * @param isLandscape 是否横屏
      * @param callback    SDK初始化回调
      */
-    public void initialize(Activity activity, Boolean isLandscape, final ICallback callback) {
+    public void initialize(Activity activity,final ICallback callback) {
         if (checkSdkBridgeNull(Function.INITIALIZE, callback)) {
             return;
         }
@@ -144,9 +160,19 @@ public final class YYXXCommSdk {
             return;
         }
 
-        SdkBridgeManager.call(Function.INITIALIZE, new Class[]{Activity.class, Boolean.class,  ICallback.class}, new Object[]{activity, isLandscape, callback});
+        SdkBridgeManager.call(Function.INITIALIZE, new Class[]{Activity.class,ICallback.class}, new Object[]{activity, callback});
     }
 
+    public void setLogoutListener(Activity activity,ICallback callback){
+        if (checkSdkBridgeNull(Function.SET_LOGOUT_LISTENER, callback)) {
+            return;
+        }
+        if (checkSdkNonInit(Function.SET_LOGOUT_LISTENER, callback)) {
+            return;
+        }
+        SdkBridgeManager.call(Function.SET_LOGOUT_LISTENER, new Class[]{Activity.class,ICallback.class}, new Object[]{activity,callback});
+
+    }
     /**
      * SDK用户登录
      *
@@ -172,18 +198,9 @@ public final class YYXXCommSdk {
 
     /**
      * SDK用户登出账号
-     *
-     * @param activity Activity上下文
-     * @param callback 登出回调对象
      */
-    public void logout(Activity activity, ICallback callback) {
-        if (checkSdkBridgeNull(Function.LOGOUT, callback)) {
-            return;
-        }
+    public void logout() {
 
-        if (checkSdkNonInit(Function.LOGOUT, callback)) {
-            return;
-        }
 
         if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
             Logger.e("调用登录接口后,调用登出账号接口间隔太短,拦截此次操作");
@@ -194,7 +211,7 @@ public final class YYXXCommSdk {
             return;
         }
         clickLogoutTime = System.currentTimeMillis();
-        SdkBridgeManager.call(Function.LOGOUT, new Class[]{Activity.class, ICallback.class}, new Object[]{activity, callback});
+        SdkBridgeManager.call(Function.LOGOUT, new Class[]{}, new Object[]{});
     }
 
     /**
@@ -311,6 +328,20 @@ public final class YYXXCommSdk {
         SdkBridgeManager.call(Function.OPEN_EXIT_VIEW, new Class[]{Activity.class, ICallback.class}, new Object[]{activity, callback});
     }
 
+    public void reportGameEvent(String event, JSONObject message){
+
+        if (checkSdkBridgeNull(Function.REPORT_GAME_EVENT, null)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.REPORT_GAME_EVENT, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.REPORT_GAME_EVENT, new Class[]{String.class, JSONObject.class}, new Object[]{event, message});
+
+
+    }
     /**
      * 同步游戏Activity的onStart
      */
@@ -419,11 +450,11 @@ public final class YYXXCommSdk {
 
 
 
-    public void onConfigurationChanged(Configuration newConfigs) {
+    public void onConfigurationChanged(Activity activity,Configuration newConfig) {
         if (checkSdkBridgeNull(Function.ON_CONFIGURATION_CHANGED, null)) {
             return;
         }
-        SdkBridgeManager.call(Function.ON_CONFIGURATION_CHANGED, new Class[]{Intent.class}, new Object[]{newConfigs});
+        SdkBridgeManager.call(Function.ON_CONFIGURATION_CHANGED, new Class[]{Activity.class,Configuration.class}, new Object[]{activity,newConfig});
     }
 
 
@@ -435,6 +466,14 @@ public final class YYXXCommSdk {
         SdkBridgeManager.call(Function.ON_REQUEST_PERMISSIONS_RESULT, new Class[]{int.class,String[].class,int[].class}, new Object[]{requestCode,permissions,grantResults});
     }
 
+    public void onWindowFocusChanged(Activity activity,boolean hasFocus){
+        if (checkSdkBridgeNull(Function.ON_WINDOW_FOCUS_CHANGED, null)) {
+            return;
+        }
+        SdkBridgeManager.call(Function.ON_WINDOW_FOCUS_CHANGED, new Class[]{Activity.class,boolean.class}, new Object[]{activity,hasFocus});
+
+    }
+
 
     public String getCurrentOpenId() {
         if (checkSdkBridgeNull(Function.GET_CURRENT_USER_ID, null)) {

+ 7 - 1
library_base/src/main/java/cn/yyxx/commsdk/base/entity/Function.java

@@ -13,6 +13,8 @@ public @interface Function {
     String INIT_APPLICATION = "initApplication";
     String INIT_AGREEMENT = "initAgreement";
     String INITIALIZE = "initialize";
+    String SET_LOGOUT_LISTENER  = "setLogoutListener";
+    String INITIALIZE_SUCCESS = "initializeSuccess";
     String LOGIN = "login";
     String LOGOUT = "logout";
     String CHARGE = "charge";
@@ -21,6 +23,8 @@ public @interface Function {
     String ROLE_UPGRADE = "roleUpgrade";
     String HAS_EXIT_VIEW = "hasExitView";
     String OPEN_EXIT_VIEW = "openExitView";
+    String REPORT_GAME_EVENT = "reportGameEvent";
+    String ON_CREATE = "onCreate";
     String ON_START = "onStart";
     String ON_RESUME = "onResume";
     String ON_RESTART = "onRestart";
@@ -31,8 +35,10 @@ public @interface Function {
     String ON_ACTIVITY_RESULT = "onActivityResult";
     String ON_CONFIGURATION_CHANGED = "onConfigurationChanged";
     String ON_REQUEST_PERMISSIONS_RESULT = "onRequestPermissionsResult";
+    String ON_WINDOW_FOCUS_CHANGED = "onWindowFocusChanged";
+
+
     String REQUEST_PERMISSION = "requestPermission";
     String GET_CURRENT_USER_ID = "getCurrentUserId";
     String GET_CURRENT_SDK_VERSION = "getCurrentSdkVersion";
-    String ON_FLOAT_CENTER_LOGOUT = "onFloatCenterLogout";
 }

+ 7 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/entity/ResultInfo.java

@@ -33,4 +33,11 @@ public class ResultInfo {
                 ", data='" + data + '\'' +
                 '}';
     }
+
+    public static final int CODE_SUCCESS = 1;
+
+    public static final int CODE_FAIL = -1;
+
+    public static final int CODE_ERROR = 400;
+
 }

+ 169 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkChargeInfo.java

@@ -5,4 +5,173 @@ package cn.yyxx.commsdk.base.entity;
  * Created on 2021/12/25
  */
 public class SdkChargeInfo {
+
+    String game_no;
+    String pay_money;
+    String server_id;
+    String server_name;
+    String role_id;
+    String role_level;
+    String role_name;
+    String ext;
+    String order_desc;
+    String product_name;
+    String product_id;
+    String vip_level;
+    String party_name;
+    String count;
+
+
+    String radio;
+    String reincarnationCount;
+    String hasGold;
+
+    String party_id;
+
+
+    public String getGame_no() {
+        return this.game_no;
+    }
+
+    public void setGame_no(final String game_no) {
+        this.game_no = game_no;
+    }
+
+    public String getPay_money() {
+        return this.pay_money;
+    }
+
+    public void setPay_money(final String pay_money) {
+        this.pay_money = pay_money;
+    }
+
+    public String getServer_id() {
+        return this.server_id;
+    }
+
+    public void setServer_id(final String server_id) {
+        this.server_id = server_id;
+    }
+
+    public String getServer_name() {
+        return this.server_name;
+    }
+
+    public void setServer_name(final String server_name) {
+        this.server_name = server_name;
+    }
+
+    public String getRole_id() {
+        return this.role_id;
+    }
+
+    public void setRole_id(final String role_id) {
+        this.role_id = role_id;
+    }
+
+    public String getRole_level() {
+        return this.role_level;
+    }
+
+    public void setRole_level(final String role_level) {
+        this.role_level = role_level;
+    }
+
+    public String getRole_name() {
+        return this.role_name;
+    }
+
+    public void setRole_name(final String role_name) {
+        this.role_name = role_name;
+    }
+
+    public String getExt() {
+        return this.ext;
+    }
+
+    public void setExt(final String ext) {
+        this.ext = ext;
+    }
+
+    public String getOrder_desc() {
+        return this.order_desc;
+    }
+
+    public void setOrder_desc(final String order_desc) {
+        this.order_desc = order_desc;
+    }
+
+    public String getProduct_name() {
+        return this.product_name;
+    }
+
+    public void setProduct_name(final String product_name) {
+        this.product_name = product_name;
+    }
+
+    public String getProduct_id() {
+        return this.product_id;
+    }
+
+    public void setProduct_id(final String product_id) {
+        this.product_id = product_id;
+    }
+
+    public String getVip_level() {
+        return this.vip_level;
+    }
+
+    public void setVip_level(final String vip_level) {
+        this.vip_level = vip_level;
+    }
+
+    public String getParty_name() {
+        return this.party_name;
+    }
+
+    public void setParty_name(final String party_name) {
+        this.party_name = party_name;
+    }
+
+    public String getCount() {
+        return this.count;
+    }
+
+    public void setCount(final String count) {
+        this.count = count;
+    }
+
+    public String getRadio() {
+        return this.radio;
+    }
+
+    public void setRadio(final String radio) {
+        this.radio = radio;
+    }
+
+    public String getReincarnationCount() {
+        return this.reincarnationCount;
+    }
+
+    public void setReincarnationCount(final String reincarnationCount) {
+        this.reincarnationCount = reincarnationCount;
+    }
+
+    public String getHasGold() {
+        return this.hasGold;
+    }
+
+    public void setHasGold(final String hasGold) {
+        this.hasGold = hasGold;
+    }
+
+
+    public String getParty_id() {
+        return this.party_id;
+    }
+
+    public void setParty_id(final String party_id) {
+        this.party_id = party_id;
+    }
+
 }

+ 151 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkRoleInfo.java

@@ -5,5 +5,156 @@ package cn.yyxx.commsdk.base.entity;
  * Created on 2021/12/25
  */
 public class SdkRoleInfo {
+    public String getRoleId() {
+        return this.roleId;
+    }
 
+    public void setRoleId(final String roleId) {
+        this.roleId = roleId;
+    }
+
+    public String getRoleName() {
+        return this.roleName;
+    }
+
+    public void setRoleName(final String roleName) {
+        this.roleName = roleName;
+    }
+
+    public String getRoleLevel() {
+        return this.roleLevel;
+    }
+
+    public void setRoleLevel(final String roleLevel) {
+        this.roleLevel = roleLevel;
+    }
+
+    public String getGender() {
+        return this.gender;
+    }
+
+    public void setGender(final String gender) {
+        this.gender = gender;
+    }
+
+    public String getServerId() {
+        return this.serverId;
+    }
+
+    public void setServerId(final String serverId) {
+        this.serverId = serverId;
+    }
+
+    public String getServerName() {
+        return this.serverName;
+    }
+
+    public void setServerName(final String serverName) {
+        this.serverName = serverName;
+    }
+
+    public String getHasGold() {
+        return this.HasGold;
+    }
+
+    public void setHasGold(final String hasGold) {
+        this.HasGold = hasGold;
+    }
+
+    public String getVipLevel() {
+        return this.vipLevel;
+    }
+
+    public void setVipLevel(final String vipLevel) {
+        this.vipLevel = vipLevel;
+    }
+
+    public String getRolePower() {
+        return this.RolePower;
+    }
+
+    public void setRolePower(final String rolePower) {
+        this.RolePower = rolePower;
+    }
+
+    public String getPartyId() {
+        return this.partyId;
+    }
+
+    public void setPartyId(final String partyId) {
+        this.partyId = partyId;
+    }
+
+    public String getPartyName() {
+        return this.partyName;
+    }
+
+    public void setPartyName(final String partyName) {
+        this.partyName = partyName;
+    }
+
+    public String getRoleCreateTime() {
+        return this.roleCreateTime;
+    }
+
+    public void setRoleCreateTime(final String roleCreateTime) {
+        this.roleCreateTime = roleCreateTime;
+    }
+
+    public String getReincarnationCount() {
+        return this.reincarnationCount;
+    }
+
+    public void setReincarnationCount(final String reincarnationCount) {
+        this.reincarnationCount = reincarnationCount;
+    }
+
+    public String getCharge() {
+        return this.charge;
+    }
+
+    public void setCharge(final String charge) {
+        this.charge = charge;
+    }
+
+    public String getProfession() {
+        return this.profession;
+    }
+
+    public void setProfession(final String profession) {
+        this.profession = profession;
+    }
+
+    public String getRoleExt() {
+        return this.roleExt;
+    }
+
+    public void setRoleExt(final String roleExt) {
+        this.roleExt = roleExt;
+    }
+
+    String roleId,roleName,roleLevel,gender,serverId,serverName,HasGold,vipLevel,RolePower,partyId,
+    partyName,roleCreateTime,reincarnationCount,charge,profession,roleExt;
+
+    @Override
+    public String toString() {
+        return "SdkRoleInfo{" +
+                "roleId='" + roleId + '\'' +
+                ", roleName='" + roleName + '\'' +
+                ", roleLevel='" + roleLevel + '\'' +
+                ", gender='" + gender + '\'' +
+                ", serverId='" + serverId + '\'' +
+                ", serverName='" + serverName + '\'' +
+                ", HasGold='" + HasGold + '\'' +
+                ", vipLevel='" + vipLevel + '\'' +
+                ", RolePower='" + RolePower + '\'' +
+                ", partyId='" + partyId + '\'' +
+                ", partyName='" + partyName + '\'' +
+                ", roleCreateTime='" + roleCreateTime + '\'' +
+                ", reincarnationCount='" + reincarnationCount + '\'' +
+                ", charge='" + charge + '\'' +
+                ", profession='" + profession + '\'' +
+                ", roleExt='" + roleExt + '\'' +
+                '}';
+    }
 }

+ 2 - 2
library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/msa/IMsaDeviceIdsCallback.java → library_base/src/main/java/cn/yyxx/commsdk/base/internal/IMsaDeviceCallback.java

@@ -1,4 +1,4 @@
-package cn.yyxx.commsdk.impl.channel.msa;
+package cn.yyxx.commsdk.base.internal;
 
 import java.util.Map;
 
@@ -6,7 +6,7 @@ import java.util.Map;
  * @author #Suyghur.
  * Created on 2021/04/23
  */
-public interface IMsaDeviceIdsCallback {
+public interface IMsaDeviceCallback {
 
     void onIdsRead(int code, String msg, Map<String, String> ids);
 }

+ 5 - 1
library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IFeature.java

@@ -11,7 +11,11 @@ import cn.yyxx.commsdk.base.internal.ICallback;
  */
 public interface IFeature {
 
-    void initialize(Activity activity, boolean isLandscape, ICallback callback);
+    void initialize(Activity activity, ICallback callback);
+
+    void initializeSuccess();
+
+    void setLogoutListener(Activity activity,ICallback callback);
 
     void login(Activity activity, ICallback callback);
 

+ 6 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/ILifeCycle.java

@@ -2,6 +2,7 @@ package cn.yyxx.commsdk.base.internal.feature;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.content.res.Configuration;
 
 /**
  * @author #Suyghur.
@@ -22,4 +23,9 @@ public interface ILifeCycle {
     void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data);
 
     void onNewIntent(Activity activity, Intent intent);
+
+    void onConfigurationChanged(Activity activity, Configuration newconfig);
+
+    void onWindowFocusChanged(Activity activity,boolean hasFocus);
+
 }

+ 3 - 0
library_channel/build.gradle

@@ -34,6 +34,9 @@ android {
 dependencies {
     compileOnly project(':library_base')
     compileOnly project(':library_channel_repository')
+
+    api project(':library_base')
+
     api files('../library_channel/libs/oaid_sdk_1.0.25.aar')
 }
 

+ 22 - 7
library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelSdkImpl.java

@@ -4,8 +4,11 @@ import android.app.Activity;
 import android.app.Application;
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Configuration;
+
+
+
 
-import java.util.List;
 
 import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
 import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
@@ -22,7 +25,7 @@ import cn.yyxx.commsdk.base.internal.feature.IRoleData;
 public class ChannelSdkImpl {
 
     private IFeature impl;
-    private int channelId = -1;
+    private int channelId = 0;
 
     public ChannelSdkImpl(Context context) {
         //TODO 从配置文件读取channelId
@@ -41,11 +44,15 @@ public class ChannelSdkImpl {
         }
     }
 
-    public void initialize(Activity activity, Boolean isLandscape, ICallback callback) {
-        impl.initialize(activity, isLandscape, callback);
+    public void initialize(Activity activity, ICallback callback) {
+        impl.initialize(activity, callback);
     }
 
-    public void onFloatCenterLogout(Activity activity, ICallback callback) {
+    public void initializeSuccess(){
+        impl.initializeSuccess();
+    }
+    public void setLogoutListener(Activity activity,ICallback callback){
+        impl.setLogoutListener(activity,callback);
     }
 
     public void login(Activity activity, final ICallback callback) {
@@ -85,7 +92,6 @@ public class ChannelSdkImpl {
     public void openExitView(Activity activity, final ICallback callback) {
         impl.openExitView(activity, callback);
     }
-
     public void onStart(Activity activity) {
         if (impl instanceof ILifeCycle) {
             ((ILifeCycle) impl).onStart(activity);
@@ -133,6 +139,15 @@ public class ChannelSdkImpl {
         }
     }
 
-    public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
+    public void onWindowFocusChanged(Activity activity,boolean hasFocus){
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onWindowFocusChanged(activity,hasFocus);
+        }
     }
+    public void onConfigurationChaged(Activity activity, Configuration newConfig){
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onConfigurationChanged(activity,newConfig);
+        }
+    }
+
 }

+ 14 - 1
library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/ChannelSdkYYXX.java

@@ -5,6 +5,7 @@ import android.app.Activity;
 import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
 import cn.yyxx.commsdk.base.internal.ICallback;
 import cn.yyxx.commsdk.base.internal.feature.IFeature;
+import cn.yyxx.commsdk.base.utils.Logger;
 
 /**
  * @author #Suyghur.
@@ -12,10 +13,22 @@ import cn.yyxx.commsdk.base.internal.feature.IFeature;
  */
 public class ChannelSdkYYXX implements IFeature {
     @Override
-    public void initialize(Activity activity, boolean isLandscape, ICallback callback) {
+    public void initialize(Activity activity, ICallback callback) {
+        Logger.i("initialize");
+    }
+
+    @Override
+    public void initializeSuccess() {
+        Logger.i("initializeSuccess");
 
     }
 
+
+    @Override
+    public void setLogoutListener(Activity activity, ICallback callback) {
+        Logger.i("setLogoutListener");
+    }
+
     @Override
     public void login(Activity activity, ICallback callback) {
 

+ 4 - 2
library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/msa/MsaDeviceIdsHandler.java → library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/msa/MsaDeviceHandler.java

@@ -10,13 +10,15 @@ import com.bun.miitmdid.interfaces.IdSupplier;
 import java.util.HashMap;
 import java.util.Map;
 
+import cn.yyxx.commsdk.base.internal.IMsaDeviceCallback;
 import cn.yyxx.support.hawkeye.LogUtils;
 
+
 /**
  * @author #Suyghur.
  * Created on 2021/04/23
  */
-public class MsaDeviceIdsHandler {
+public class MsaDeviceHandler {
 
     private static final String VERSION = "1.0.25";
 
@@ -24,7 +26,7 @@ public class MsaDeviceIdsHandler {
     public static String vaid = "";
     public static String aaid = "";
 
-    public static void initMsaDeviceIds(Context context, final IMsaDeviceIdsCallback callback) {
+    public static void initMsaDeviceIds(Context context, final IMsaDeviceCallback callback) {
         LogUtils.i("attach msa sdk , version : " + VERSION);
         int code = MdidSdkHelper.InitSdk(context, true, new IIdentifierListener() {
             @Override

+ 0 - 1
library_core/build.gradle

@@ -52,5 +52,4 @@ android {
 dependencies {
 
     api project(':library_base')
-    api project(':library_channel')
 }

+ 20 - 9
library_core/src/main/java/cn/yyxx/commsdk/core/SdkBridge.java

@@ -4,6 +4,8 @@ import android.app.Activity;
 import android.app.Application;
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
 
 import java.util.List;
 
@@ -39,20 +41,20 @@ public final class SdkBridge {
         impl.initAgreement(activity, callback);
     }
 
-    public void initialize(Activity activity, Boolean isLandscape, ICallback callback) {
-        impl.initialize(activity, isLandscape, callback);
+    public void initialize(Activity activity , ICallback callback) {
+        impl.initialize(activity, callback);
     }
-
-    public void onFloatCenterLogout(Activity activity, ICallback callback) {
-        impl.onFloatCenterLogout(activity, callback);
+    public void setLogoutListener(Activity activity,ICallback callback){
+        impl.setLogoutListener(activity,callback);
     }
 
+
     public void login(Activity activity, final ICallback callback) {
         impl.login(activity, callback);
     }
 
-    public void logout(Activity activity, final ICallback callback) {
-        impl.logout(activity, callback);
+    public void logout() {
+        impl.logout();
     }
 
     public void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback) {
@@ -112,11 +114,20 @@ public final class SdkBridge {
         impl.onNewIntent(activity, intent);
     }
 
-    public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
-        impl.requestPermission(activity, permissions, callback);
+    public void onConfigurationChanged(Activity activity,Configuration newConfigs){
+        impl.onConfigurationChanged(activity,newConfigs);
+    }
+
+    public void onCreate(Activity activity, Bundle savedInstanceState){
+        impl.onCreate(activity,savedInstanceState);
     }
 
     public String getCurrentUserId() {
         return impl.getCurrentUserId();
     }
+
+
+    public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
+        impl.requestPermission(activity, permissions, callback);
+    }
 }

+ 133 - 39
library_core/src/main/java/cn/yyxx/commsdk/core/common/CommonOperationManager.java

@@ -5,7 +5,6 @@ import android.app.Activity;
 import android.app.Application;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.SharedPreferences;
 import android.os.Build;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
@@ -14,24 +13,27 @@ import android.text.TextUtils;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import cn.yyxx.commsdk.base.entity.ResultInfo;
 import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.base.internal.IMsaDeviceCallback;
 import cn.yyxx.commsdk.base.internal.IRequestCallback;
 import cn.yyxx.commsdk.base.utils.Logger;
 import cn.yyxx.commsdk.core.SdkDrive;
 import cn.yyxx.commsdk.core.constants.Constants;
+import cn.yyxx.commsdk.core.entry.bean.InitBean;
 import cn.yyxx.commsdk.core.network.SdkRequest;
 import cn.yyxx.commsdk.core.ui.dialog.PrivacyPolicyDialog;
 import cn.yyxx.commsdk.core.ui.dialog.SingleButtonDialog;
+import cn.yyxx.commsdk.core.utils.MMKVUtils;
 import cn.yyxx.commsdk.core.utils.ManifestUtils;
 import cn.yyxx.commsdk.core.utils.ParamsUtils;
 import cn.yyxx.commsdk.core.utils.ResourceUtil;
-import cn.yyxx.commsdk.core.utils.SharedPreferencesUtils;
-import cn.yyxx.commsdk.impl.channel.msa.IMsaDeviceIdsCallback;
-import cn.yyxx.commsdk.impl.channel.msa.MsaDeviceIdsHandler;
 import cn.yyxx.support.JsonUtils;
 
 import cn.yyxx.support.permission.IPermissionCallback;
@@ -39,17 +41,20 @@ import cn.yyxx.support.permission.Permission;
 import cn.yyxx.support.permission.PermissionKit;
 
 public class CommonOperationManager {
-    public static CommonOperationManager permissionManager = null;
+    public static CommonOperationManager commonOperationManager = null;
 
     private boolean hasIdsRead = false;
+    private String oaid = "";
 
 
+    public static InitBean initBean = null;
+
     private CommonOperationManager(){}
     public static CommonOperationManager getInstance(){
-        if (permissionManager == null){
-            permissionManager = new CommonOperationManager();
+        if (commonOperationManager == null){
+            commonOperationManager = new CommonOperationManager();
         }
-        return permissionManager;
+        return commonOperationManager;
     }
     public void initAgreement(Activity activity, ICallback callback){
 
@@ -68,8 +73,7 @@ public class CommonOperationManager {
         }
 
 
-        String isShowPolicy = SharedPreferencesUtils.getSharedPreferences(activity, Constants.SP_KEY,"isShowPolicy");
-
+        String isShowPolicy = MMKVUtils.getInstance().commonKV.decodeString("isShowPolicy","");
         if (isShowPolicy.isEmpty()){
             SdkRequest.getInstance().initAgreement(activity, new IRequestCallback() {
                 @Override
@@ -77,17 +81,7 @@ public class CommonOperationManager {
 
 
                     if (resultInfo.code == 400){
-                        new SingleButtonDialog.Builder(activity)
-                           .setPositiveButton(new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int which) {
-
-                                System.exit(0);
-                            }
-                        })
-                           .Create(activity.getString(ResourceUtil.getStringId(activity,"yyxx_comm_network_error_tip")))
-                           .show();
-                        return;
+                        showExitDialog(activity);
                     }
                     String policy_url = "";
 
@@ -110,7 +104,8 @@ public class CommonOperationManager {
                     new PrivacyPolicyDialog(activity, policy_url, new PrivacyPolicyDialog.OnClosePageListener() {
                         @Override
                         public void onUserAgreePolicy() {
-                            SharedPreferencesUtils.setSharedPreferences( Constants.SP_KEY,"isShowPolicy","1",activity);
+
+                            MMKVUtils.getInstance().commonKV.encode("isShowPolicy","1");
                             requestPermission(activity,callback);
                         }
 
@@ -128,23 +123,112 @@ public class CommonOperationManager {
 
     }
 
-    public void initialize(Activity activity, Boolean isLandscape, ICallback callback){
+    public void initialize(Activity activity, ICallback callback){
+
+
+        if (!hasIdsRead) {
+            Logger.e("还未读取到ids,将延迟初始化");
+            AtomicInteger timeCount = new AtomicInteger(0);
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    while (!hasIdsRead) {
+                        try {
+                            Logger.d("还未读取到ids,延迟1s初始化");
+                            Thread.sleep(1000);
+                            timeCount.getAndIncrement();
+                            if (timeCount.get() >= 5) {
+                                hasIdsRead = true;
+                            }
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                    activity.runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            if (TextUtils.isEmpty(oaid)) {
+                                Logger.e("读取到ids失败,共延迟" + timeCount + "s初始化接口,将进行初始化...");
+                            } else {
+                                Logger.e("读取到ids,共延迟" + timeCount + "s初始化接口,将进行初始化...");
+                            }
+
+                            startInitSdk(activity, callback);
+                        }
+                    });
+                }
+            }).start();
+        } else {
+            Logger.i("读取到ids,开始初始化");
+            startInitSdk(activity, callback);
+        }
+
+
+
+
+
+    }
+
+    private void startInitSdk(Activity activity, ICallback callback) {
+
         SdkRequest.getInstance().initSdk(activity, new IRequestCallback() {
             @Override
             public void onResponse(ResultInfo resultInfo) {
-                    Logger.d(resultInfo.msg);
+
+                if (resultInfo.code ==ResultInfo.CODE_SUCCESS){
+                    initBean = InitBean.toBean(resultInfo.data);
+                    initBean.toString();
+                    Logger.i(initBean.toString());
+                    callback.onResult(resultInfo.CODE_SUCCESS,activity.getString(ResourceUtil.getStringId(activity,"yyxx_comm_init_success")));
+                }else if (resultInfo.code ==ResultInfo.CODE_FAIL){
+                    callback.onResult(resultInfo.CODE_FAIL,activity.getString(ResourceUtil.getStringId(activity,"yyxx_comm_init_fail")));
+                } else if (resultInfo.code ==ResultInfo.CODE_ERROR){
+                    showExitDialog(activity);
+                }
+
             }
         });
+
     }
 
+    void showExitDialog(Activity activity){
+        new SingleButtonDialog.Builder(activity)
+                .setPositiveButton(new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
 
-    public void initMsaDeviceIds(Application application,Context context){
-        MsaDeviceIdsHandler.initMsaDeviceIds(application, new IMsaDeviceIdsCallback() {
-            @Override
-            public void onIdsRead(int code, String msg, Map<String, String> ids) {
+                        System.exit(0);
+                    }
+                })
+                .Create(activity.getString(ResourceUtil.getStringId(activity,"yyxx_comm_network_error_tip")))
+                .show();
+        return;
+    }
+
+    public void initMsaDeviceIds(Application application){
+
+
+        try {
+            Class<?> billingImpl = Class.forName("cn.yyxx.commsdk.impl.channel.msa.MsaDeviceHandler");
+            Constructor<?> constructor = billingImpl.getDeclaredConstructor();
+            Object impl = constructor.newInstance();
+            Method method = billingImpl.getDeclaredMethod("initMsaDeviceIds", Context.class,IMsaDeviceCallback.class);
+            method.setAccessible(true);
+            method.invoke(impl, application, new IMsaDeviceCallback() {
+                @Override
+                public void onIdsRead(int code, String msg, Map<String, String> ids) {
+                    if (code == 0){
+                        Logger.i(ids.toString());
+                        oaid = ids.get("oaid");
+                    }
+                    hasIdsRead = true;
+
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 
-            }
-        });
     }
     @SuppressLint("MissingPermission")
     public JSONObject getIfa(Context context){
@@ -153,7 +237,9 @@ public class CommonOperationManager {
 
         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P){
 
-                ifa = MsaDeviceIdsHandler.oaid;
+
+                ifa = oaid;
+
                 ifa_type =  "2";
         }else{
             if (PermissionKit.isGranted(context,Permission.READ_PHONE_STATE)){
@@ -190,8 +276,8 @@ public class CommonOperationManager {
 
     static String userSimulateImei(Context context){
 
-        String  simulateImei  = SharedPreferencesUtils.getSharedPreferences(context,Constants.SP_KEY, "simulateImei");
 
+        String simulateImei = MMKVUtils.getInstance().commonKV.decodeString("simulateImei","");
         if (!simulateImei.isEmpty()){
             return simulateImei;
         }else {
@@ -199,8 +285,7 @@ public class CommonOperationManager {
             // 用putString的方法保存数据
             String encryptMD5to16 ="YYR" + simulateUniqueId().substring(8, 24);
 
-            SharedPreferencesUtils.setSharedPreferences(Constants.SP_KEY,"simulateImei",encryptMD5to16,context);
-
+            MMKVUtils.getInstance().commonKV.encode("simulateImei",encryptMD5to16);
 
             return encryptMD5to16;
         }
@@ -229,6 +314,7 @@ public class CommonOperationManager {
 
         String  time = m_szDevIDShort + (System.currentTimeMillis());
         return  getMD5(time);
+
     }
 
     public static String getMD5(String content) {
@@ -258,17 +344,25 @@ public class CommonOperationManager {
 
     void requestPermission(Activity activity,ICallback callback){
 
+        // 直接跳过,不申请权限
         if (!ManifestUtils.getMetaDataValue(activity,"yyxx.SkipPermission").isEmpty()){
-            callback.onResult(Constants.CODE_SUCCESS,"User agree policy");
-        }else if (!SharedPreferencesUtils.getSharedPreferences(activity,Constants.SP_KEY,"yyxxStopRequestPermission").isEmpty()){
-            callback.onResult(Constants.CODE_SUCCESS,"User agree policy");
-        }else{
+            callback.onResult(Constants.CODE_SUCCESS,"User skip permission required");
+        }
+        //第二次打开,不再申请权限
+        else if (!MMKVUtils.getInstance().commonKV.decodeString("yyxx.StopRequestPermission","").isEmpty()){
+            callback.onResult(Constants.CODE_SUCCESS,"No more permissions required");
+        }
+        //申请权限
+        else{
             goRequestPermission(activity, new PermissonCallBack() {
                 @Override
                 public void onResult(Result code) {
                     if (code == Result.FINISH){
                         SdkDrive.getInstance().initDrive(activity);
-                        callback.onResult(Constants.CODE_SUCCESS,"User agree policy");
+                        if(!ManifestUtils.getMetaDataValue(activity,"yyxx.StopRequestPermission").isEmpty()){
+                            MMKVUtils.getInstance().commonKV.encode("yyxx.StopRequestPermission","1");
+                        }
+                        callback.onResult(Constants.CODE_SUCCESS,"The permission application is complete");
                     }
                 }
             });

+ 10 - 0
library_core/src/main/java/cn/yyxx/commsdk/core/entry/ComponentLoginConfig.java

@@ -0,0 +1,10 @@
+package cn.yyxx.commsdk.core.entry;
+
+public class ComponentLoginConfig {
+        public String agreement_privacy = "";
+        public String  service_center = "";
+        public String agreement_user = "" ;
+        public boolean isShowPhoneRegFrist,isOpenRealName,isOpenFloatView,isForceRealName,isShowKf,isSMSBlocking;
+        public int sdk_login = 1;
+        public int rn_bh = 1800;
+}

+ 152 - 0
library_core/src/main/java/cn/yyxx/commsdk/core/entry/bean/InitBean.java

@@ -0,0 +1,152 @@
+package cn.yyxx.commsdk.core.entry.bean;
+
+import android.text.TextUtils;
+
+
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.text.DecimalFormat;
+
+public class InitBean {
+
+    private static final String switchState = "1";
+
+    public String agreement_privacy = "";
+
+    public String service_center = "";
+
+    public String access_token = "";
+
+    public String agreement_user = "";
+
+    public JSONObject links = null;
+
+    public JSONArray reg_tabs = null;
+
+    public int sdk_login = 1;
+
+    public int bswitch = 0;
+
+    public int rn_bh = 1800;
+
+
+    public  boolean isShowPhoneRegFrist,isOpenRealName,isOpenFloatView,isForceRealName,isShowKf,isSMSBlocking;
+
+    public static InitBean toBean(String json) {
+        if (TextUtils.isEmpty(json)) {
+            return null;
+        }
+
+
+        InitBean initBean = new InitBean();
+        try {
+            JSONObject jsonObject = new JSONObject(json);
+
+
+            initBean.reg_tabs = jsonObject.optJSONArray("reg_tabs");
+            initBean.sdk_login = jsonObject.optInt("sdk_login", 100);
+
+            initBean.bswitch = jsonObject.optInt("bswitch");
+
+            parseSwitchCode(initBean,initBean.bswitch);
+
+            initBean.access_token = jsonObject.optString("access_token");
+
+            initBean.rn_bh = jsonObject.optInt("rn_bh", 1800);
+
+            if (initBean.reg_tabs != null) {
+
+                if (initBean.reg_tabs.get(0).toString().equals("phone")) {
+                     initBean.isShowPhoneRegFrist = true;
+                }
+
+            }
+            initBean.links = jsonObject.optJSONObject("links");
+
+            if (initBean.links != null) {
+
+                initBean.agreement_privacy = initBean.links.optString("agreement_privacy");
+                initBean.service_center = initBean.links.optString("service_center");
+                initBean.agreement_user = initBean.links.optString("agreement_user");
+            }
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+
+        return initBean;
+
+    }
+
+    @Override
+    public String toString() {
+        return "InitBean{" +
+                "agreement_privacy='" + agreement_privacy + '\'' +
+                ", service_center='" + service_center + '\'' +
+                ", access_token='" + access_token + '\'' +
+                ", agreement_user='" + agreement_user + '\'' +
+                ", links=" + links +
+                ", reg_tabs=" + reg_tabs +
+                ", sdk_login=" + sdk_login +
+                ", bswitch=" + bswitch +
+                ", rn_bh=" + rn_bh +
+                ", isShowPhoneRegFrist=" + isShowPhoneRegFrist +
+                ", isOpenRealName=" + isOpenRealName +
+                ", isOpenFloatView=" + isOpenFloatView +
+                ", isForceRealName=" + isForceRealName +
+                ", isShowKf=" + isShowKf +
+                ", isSMSBlocking=" + isSMSBlocking +
+                '}';
+    }
+
+    static void parseSwitchCode(InitBean initBean, int code){
+        {
+            String binaryStr = Integer.toBinaryString(code);
+            DecimalFormat df=new DecimalFormat("000000");
+            String bwstr=df.format(Integer.parseInt(binaryStr));
+
+
+            for (int i = 0; i < bwstr.length(); i++) {
+                int a = bwstr.length()-i -1;
+                int b = bwstr.length()-i;
+                String s2 = bwstr.substring(a,b);
+                switch (i) {
+                    case 0:
+                        if (s2.equals(switchState)){
+                            initBean.isOpenRealName = true;
+                        }
+
+                        break;
+                    case 1:
+                        if (s2.equals(switchState)){
+                            initBean.isOpenFloatView = true;
+                        }
+                        break;
+                    case 2:
+                        if (s2.equals(switchState)){
+                            initBean.isForceRealName = true;
+                        }
+                        break;
+                    case 3:
+                        if (s2.equals(switchState)){
+                            initBean.isShowKf = true;
+                        }
+                        break;
+                    case 4:
+                        if (s2.equals(switchState)){
+                            initBean.isSMSBlocking = true;
+                        }
+                        break;
+
+                }
+
+            }
+
+        }
+
+    }
+}

+ 118 - 5
library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkBridgeImpl.java

@@ -4,10 +4,18 @@ import android.app.Activity;
 import android.app.Application;
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 
 import java.util.List;
 import java.util.Map;
 
+import cn.yyxx.commsdk.base.entity.Function;
+import cn.yyxx.commsdk.base.entity.ResultInfo;
 import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
 import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
 import cn.yyxx.commsdk.base.internal.ICallback;
@@ -17,6 +25,8 @@ import cn.yyxx.commsdk.base.utils.Logger;
 import cn.yyxx.commsdk.core.common.CommonOperationManager;
 
 import cn.yyxx.commsdk.core.utils.MMKVUtils;
+import cn.yyxx.support.permission.IPermissionCallback;
+import cn.yyxx.support.permission.PermissionKit;
 
 
 /**
@@ -27,16 +37,28 @@ import cn.yyxx.commsdk.core.utils.MMKVUtils;
 
 public final class SdkBridgeImpl {
 
+    private Object mSdkProxy;
     public SdkBridgeImpl(Context context) {
 
     }
 
+    private Object getSdkProxyManager(Context context){
+        if (mSdkProxy == null) {
+            mSdkProxy = SdkProxyManager.initSdkProxyManager(context);
+        }
+        return mSdkProxy;
+    }
+
     public void attachBaseContext(Application application, Context context) {
         Logger.i("application   attachBaseContext ...");
         // 初始化Zap日志框架
         Logger.initZap(application);
+        CommonOperationManager.getInstance().initMsaDeviceIds(application);
 
-        CommonOperationManager.getInstance().initMsaDeviceIds(application,context);
+        if (mSdkProxy == null) {
+            mSdkProxy = getSdkProxyManager(application);
+        }
+        SdkProxyManager.call(Function.ATTACH_BASE_CONTEXT,  new Class[]{Application.class, Context.class}, new Object[]{application, context});
 
 
     }
@@ -44,6 +66,10 @@ public final class SdkBridgeImpl {
     public void initApplication(Application application) {
         Logger.i("initApplication ...");
         MMKVUtils.getInstance().init(application);
+        if (mSdkProxy == null) {
+            mSdkProxy = getSdkProxyManager(application);
+        }
+        SdkProxyManager.call(Function.INIT_APPLICATION,  new Class[]{Application.class}, new Object[]{application});
 
     }
 
@@ -51,19 +77,48 @@ public final class SdkBridgeImpl {
 
         CommonOperationManager.getInstance().initAgreement(activity,callback);
     }
-    public void initialize(Activity activity, Boolean isLandscape, ICallback callback) {
+    public void initialize(Activity activity, ICallback callback) {
+
 
-        CommonOperationManager.getInstance().initialize(activity,isLandscape,callback);
+        if (mSdkProxy == null) {
+            mSdkProxy = getSdkProxyManager(activity);
+        }
+
+        SdkProxyManager.call(Function.INITIALIZE,  new Class[]{Activity.class, ICallback.class}, new Object[]{activity,callback});
+
+        CommonOperationManager.getInstance().initialize(activity, new ICallback() {
+            @Override
+            public void onResult(int code, String result) {
+                callback.onResult(code,result);
+                if (code == ResultInfo.CODE_SUCCESS){
+                    SdkProxyManager.call(Function.INITIALIZE_SUCCESS,  new Class[]{}, new Object[]{});
+                }
+            }
+        });
 
     }
 
-    public void onFloatCenterLogout(Activity activity, ICallback callback) {
+    public void setLogoutListener(Activity activity,ICallback callback){
+        if (mSdkProxy == null) {
+            mSdkProxy = getSdkProxyManager(activity);
+        }
+
+        SdkProxyManager.call(Function.SET_LOGOUT_LISTENER,  new Class[]{Activity.class, ICallback.class}, new Object[]{activity,callback});
+
     }
 
     public void login(Activity activity, final ICallback callback) {
+        if (mSdkProxy == null) {
+            mSdkProxy = getSdkProxyManager(activity);
+        }
+
+        SdkProxyManager.call(Function.LOGIN,  new Class[]{Activity.class, ICallback.class}, new Object[]{activity,callback});
+
     }
 
-    public void logout(Activity activity, final ICallback callback) {
+    public void logout() {
+        SdkProxyManager.call(Function.LOGOUT,  new Class[]{}, new Object[]{});
+
     }
 
     public void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback) {
@@ -110,10 +165,68 @@ public final class SdkBridgeImpl {
     public void onNewIntent(Activity activity, Intent intent) {
     }
 
+    public void onConfigurationChanged(Activity activity, Configuration newConfigs){
+    }
+    public void onCreate(Activity activity, Bundle saveInstanceState){
+
+    }
     public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
+        Logger.i(" request  extend permission ...");
+        PermissionKit.with().permission(permissions).request(activity, new IPermissionCallback() {
+            @Override
+            public void onGranted(List<String> list, boolean all) {
+                Logger.i(" request  extend permission:onGranted");
+                JSONObject jsonObject = permissionList2Json(list);
+                if (jsonObject != null) {
+                    callback.onResult(0, jsonObject.toString());
+                } else {
+                    callback.onResult(0, "");
+                }
+            }
+
+            @Override
+            public void onDenied(List<String> list, boolean never) {
+
+                Logger.i(" request  extend permission :onDenied...");
+
+
+                JSONObject jsonObject = permissionList2Json(list);
+                if (jsonObject != null) {
+                    callback.onResult(-1, jsonObject.toString());
+                } else {
+                    callback.onResult(-1, "");
+                }
+            }
+
+            @Override
+            public void onProxyFinish() {
+                Logger.i(" request  extend permission :onProxyFinish...");
+
+            }
+        });
+
     }
 
+
+
     public String getCurrentUserId() {
         return "";
     }
+
+
+    private JSONObject permissionList2Json(List<String> list) {
+        try {
+            JSONObject jsonObject = new JSONObject();
+            JSONArray jsonArray = new JSONArray();
+            for (String permission : list) {
+                jsonArray.put(permission);
+            }
+            jsonObject.put("permissions", jsonArray);
+            return jsonObject;
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
 }

+ 58 - 0
library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkProxyManager.java

@@ -0,0 +1,58 @@
+package cn.yyxx.commsdk.core.impl;
+
+import android.content.Context;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/25
+ */
+final class SdkProxyManager {
+    static Object sdkProxy = null;
+    static Class<?> clzBridge = null;
+
+    public static Object initSdkProxyManager(Context context) {
+        if (sdkProxy != null) {
+            return sdkProxy;
+        }
+
+        try {
+            clzBridge = Class.forName("cn.yyxx.commsdk.impl.ChannelSdkImpl");
+            //获取构造函数的构造器
+            Constructor<?> constructor = clzBridge.getDeclaredConstructor(Context.class);
+            sdkProxy = constructor.newInstance(context);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return sdkProxy;
+    }
+
+    public static void call(String methodName, Class<?>[] types, Object[] values) {
+        if (sdkProxy == null) {
+            return;
+        }
+        try {
+
+            Method method = clzBridge.getMethod(methodName, types);
+            method.invoke(sdkProxy, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static Object callback(String methodName, Class<?>[] types, Object[] values) {
+        if (sdkProxy == null) {
+            return null;
+        }
+        try {
+            Method method = clzBridge.getMethod(methodName, types);
+            return method.invoke(sdkProxy, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 1 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/ui/dialog/PrivacyPolicyDialog.java

@@ -42,7 +42,7 @@ public class PrivacyPolicyDialog extends Dialog {
 
         setContentView(ResourceUtil.getLayoutId(context,
                 "yyxx_comm_privacy_dialog"));
-        boolean  isLandscape = AppUtils.isLandscape(context);;
+        boolean  isLandscape = AppUtils.isLandscape(context);
 
 
          WebView webView;

+ 8 - 2
library_core/src/main/java/cn/yyxx/commsdk/core/utils/MMKVUtils.java

@@ -21,6 +21,8 @@ public class MMKVUtils implements MMKVHandler {
     public MMKV userKV = null;
     public MMKV orderKV = null;
 
+    public MMKV commonKV = null;
+
     private MMKVUtils() {
 
     }
@@ -31,10 +33,14 @@ public class MMKVUtils implements MMKVHandler {
 
     public void init(Context context) {
         String dir = String.format(Locale.getDefault(), "%s/sdk_info", context.getExternalFilesDir("").getAbsolutePath());
+        Logger.i("root dir:" + dir);
         MMKV.initialize(context, dir, MMKVLogLevel.LevelInfo);
         MMKV.registerHandler(this);
-        this.userKV = MMKV.mmkvWithID("user_info");
-        this.orderKV = MMKV.mmkvWithID("order_info");
+
+        userKV = MMKV.mmkvWithID("user_info");
+        orderKV = MMKV.mmkvWithID("order_info");
+
+        commonKV = MMKV.mmkvWithID("agreement_info");
     }
 
     public void release() {

+ 0 - 29
library_core/src/main/java/cn/yyxx/commsdk/core/utils/SharedPreferencesUtils.java

@@ -1,29 +0,0 @@
-package cn.yyxx.commsdk.core.utils;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.SharedPreferences;
-
-public class SharedPreferencesUtils {
-
-    public static String getSharedPreferences(Context context, String tag,
-                                              String key) {
-
-        SharedPreferences sp = context.getSharedPreferences(tag,
-                Activity.MODE_PRIVATE);
-        String name = sp.getString(key, "");
-        return name;
-
-    }
-
-
-    public static void setSharedPreferences(String head, String key, String value, Context context) {
-        SharedPreferences sp = context.getSharedPreferences(head, Activity.MODE_PRIVATE);
-        // 实例化SharedPreferences.Editor对象(第二步)l
-        SharedPreferences.Editor editor = sp.edit();
-        // 用putString的方法保存数据
-        editor.putString(key, value);
-        // 提交当前数据
-        editor.commit();
-    }
-}

+ 2 - 0
library_core/src/main/res/values/yyxx_comm_strings.xml

@@ -7,4 +7,6 @@
     <string name="yyxx_comm_confirm">确定</string>
     <string name="yyxx_comm_network_error_tip">网络出错,请检查网络</string>
     <string name="yyxx_comm_params_error_tip">参数异常,请检查yyxx_cfg.properties中的YYXX_GAME_CODE值</string>
+    <string name="yyxx_comm_init_success">初始化成功</string>
+    <string name="yyxx_comm_init_fail">初始化失败</string>
 </resources>

+ 8 - 0
library_platform/build.gradle

@@ -32,12 +32,20 @@ android {
 }
 
 dependencies {
+//    compileOnly files('../libs/android-support-v4.jar')
 //    api files('../libs/oaid_sdk_1.0.25.jar')
 //    api files('../libs/mmkv-static-1.2.8.jar')
 //    api files('../libs/dolin_zap_1.0.0.jar')
 //    api files('../libs/yyxx_support_1.0.2.jar')
 //    api files('../libs/ali_authsdk_2.12.1.jar')
 //    api files('../libs/android-support-v4.jar')
+
+    compileOnly project(':library_base')
+
+    compileOnly project(':library_channel')
+
+    compileOnly project(':library_core')
+
 }
 
 //apply from: 'buildJar.gradle'

+ 9 - 0
library_platform/src/main/AndroidManifest.xml

@@ -2,4 +2,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="cn.yyxx.commsdk.platform">
 
+    <application>
+    <activity
+        android:name="cn.yyxx.commsdk.platform.hnyy.HNYYLoginActivity"
+        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
+        android:imeOptions="flagNoFullscreen|flagNoExtractUi"
+        android:launchMode="singleTask"
+        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
+        android:windowSoftInputMode="adjustResize|stateHidden|stateVisible" />
+    </application>
 </manifest>

+ 125 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/BaseLoginActivity.java

@@ -0,0 +1,125 @@
+package cn.yyxx.commsdk.platform;
+
+import android.content.Context;
+import android.os.Build;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentTransaction;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+import java.util.LinkedList;
+
+//import cn.yyxx.support.ResUtils;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/10/25
+ */
+public class BaseLoginActivity extends FragmentActivity {
+
+    protected LinkedList<String> fragmentStack = new LinkedList<>();
+    protected String currentFragmentTag = "";
+    protected int containerId = 0;
+
+    public void switchFragment(String tag) {
+
+    }
+
+    public void switchFragment(Fragment fragment, String tag) {
+        if (fragmentStack == null) {
+            return;
+        }
+
+        if (fragmentStack.contains(tag)) {
+            //栈里最后一个与tag相同才执行删除
+            if (fragmentStack.size() > 1 && !fragmentStack.getLast().equals(tag)) {
+                fragmentStack.removeLast();
+            }
+        } else {
+            fragmentStack.add(tag);
+        }
+
+        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+//        transaction.setCustomAnimations(ResUtils.getResId(this, "qs_core_fragment_push_anim", "anim"), ResUtils.getResId(this, "qs_core_fragment_popup_anim", "anim"));
+        Fragment tagFragment = getSupportFragmentManager().findFragmentByTag(currentFragmentTag);
+        if (tagFragment != null && !tag.equals(currentFragmentTag)) {
+            tagFragment.onPause();
+            transaction.hide(tagFragment);
+        }
+        tagFragment = getSupportFragmentManager().findFragmentByTag(tag);
+        if (tagFragment == null) {
+            transaction.add(containerId, fragment, tag);
+        } else {
+            tagFragment.onResume();
+            transaction.show(tagFragment);
+        }
+        currentFragmentTag = tag;
+        transaction.commitAllowingStateLoss();
+    }
+
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+            View v = getCurrentFocus();
+            if (isShouldHideInput(v, ev)) {
+
+                InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
+                if (imm != null) {
+                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+                }
+            }
+            return super.dispatchTouchEvent(ev);
+        }
+        // 必不可少,否则所有的组件都不会有TouchEvent了
+        if (getWindow().superDispatchTouchEvent(ev)) {
+            return true;
+        }
+        return onTouchEvent(ev);
+    }
+
+    protected boolean isShouldHideInput(View v, MotionEvent event) {
+        if ((v instanceof EditText)) {
+            int[] leftTop = {0, 0};
+            //获取输入框当前的location位置
+            v.getLocationInWindow(leftTop);
+            int left = leftTop[0];
+            int top = leftTop[1];
+            int bottom = top + v.getHeight();
+            int right = left + v.getWidth();
+            // 点击的是输入框区域,保留点击EditText的事件
+            return !(event.getX() > left) || !(event.getX() < right) || !(event.getY() > top) || !(event.getY() < bottom);
+        }
+        return false;
+    }
+
+    protected void hideBar() {
+        // The UI options currently enabled are represented by a bitfield.
+        // getSystemUiVisibility() gives us that bitfield.
+        int uiOptions = getWindow().getDecorView().getSystemUiVisibility();
+        int newUiOptions = uiOptions;
+        boolean isImmersiveModeEnabled =
+                ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
+        if (!isImmersiveModeEnabled) {
+            if (Build.VERSION.SDK_INT >= 14) {
+                newUiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+            }
+            if (Build.VERSION.SDK_INT >= 16) {
+                newUiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN;
+            }
+            if (Build.VERSION.SDK_INT >= 18) {
+                newUiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+            }
+            getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        hideBar();
+    }
+}

+ 20 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/PlatformSdk.java

@@ -1,8 +1,28 @@
 package cn.yyxx.commsdk.platform;
 
+import android.content.Context;
+
 /**
  * @author #Suyghur.
  * Created on 2021/12/25
  */
 public class PlatformSdk {
+    private PlatformSdk platformSdk;
+    private Context context;
+    public PlatformSdk(Context context){
+        this.context = context;
+    }
+    public PlatformSdk getInstance(Context context){
+        if (platformSdk == null) {
+            synchronized (PlatformSdk.class) {
+                if (platformSdk == null) {
+                    platformSdk = new PlatformSdk(context);
+                }
+            }
+        }
+        return platformSdk;
+    }
+    public void login(){
+
+    }
 }

+ 60 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/HNYYLoginActivity.java

@@ -0,0 +1,60 @@
+package cn.yyxx.commsdk.platform.hnyy;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+
+import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.core.entry.bean.InitBean;
+import cn.yyxx.commsdk.platform.BaseLoginActivity;
+import cn.yyxx.commsdk.platform.user.UserSession;
+import cn.yyxx.commsdk.platform.user.UserSessionManager;
+import cn.yyxx.support.AndroidBug5497Workaround;
+import cn.yyxx.support.AppUtils;
+import cn.yyxx.support.ResUtils;
+
+public class HNYYLoginActivity extends BaseLoginActivity {
+
+    private static InitBean initBean = null;
+    private static ICallback iCallback = null;
+    private FrameLayout rootContainer;
+    private UserSession session;
+
+    @Override
+    protected void onCreate(@Nullable final Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        containerId = ResUtils.getResId(this, "hnyy_login_container", "id");
+
+    }
+
+    public static void start(Activity activity, InitBean initBean, ICallback callback) {
+        initBean = initBean;
+        iCallback = callback;
+        activity.startActivity(new Intent(activity, HNYYLoginActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+    }
+
+    private void initView(Context context){
+        if (AppUtils.isLandscape(context)) {
+            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
+        }
+        setContentView(ResUtils.getResId(this, "qs_qc_login", "layout"));
+
+        if (!AppUtils.isLandscape(context)) {
+            AndroidBug5497Workaround.assistActivity(this);
+        }
+        rootContainer = findViewById(ResUtils.getResId(this, "qs_qc_login_container", "id"));
+        session = UserSessionManager.getInstance().getLocalLastSession();
+
+    }
+
+
+    @Override
+    public void switchFragment(final String tag) {
+        super.switchFragment(tag);
+    }
+}

+ 16 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/HNYYLoginFragmentTag.java

@@ -0,0 +1,16 @@
+package cn.yyxx.commsdk.platform.hnyy;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.SOURCE)
+public @interface HNYYLoginFragmentTag {
+    String PAGE_ACCOUNT_LOGIN = "UserAccountLoginFragment";
+    String PAGE_PHONE_LOGIN = "UserPhoneLoginFragment";
+    String PAGE_POHONE_SET_PASSWORD = "UserPhoneLoginSetpwdFragment";
+    String PAGE_ACCOUNT_REGISTER = "UserRegisterFragment";
+    String PAGE_RETRIEVE_PASSWORD = "UserRetrievePwdFragment";
+    String PAGE_SWITCH_ACCOUNT_LOGIN = "UserSwitchAccountLoginFragment";
+
+
+}

+ 57 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/BaseFragment.java

@@ -0,0 +1,57 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.widget.ImageButton;
+
+
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+
+public class BaseFragment extends Fragment implements View.OnClickListener {
+    private ImageButton btn_kefu;
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        btn_kefu = view.findViewById(ResourceUtil.getId(getActivity(),"btn_kefu"));
+        if (btn_kefu != null){
+            btn_kefu.setOnClickListener(this);
+
+        }
+
+
+
+    }
+
+    public void addFragmentToActivity(FragmentManager fragmentManager,
+                                      Fragment fragment, int frameId) {
+
+
+        FragmentTransaction transaction = fragmentManager.beginTransaction();
+        transaction.add(frameId, fragment).addToBackStack(null);
+        transaction.commit();
+    }
+
+    public void replaceFragmentToActivity(FragmentManager fragmentManager, Fragment fragment, int frameId) {
+
+
+
+        FragmentTransaction transaction = fragmentManager.beginTransaction();
+        transaction.replace(frameId, fragment);
+        transaction.commit();
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == ResourceUtil.getId(getActivity(), "btn_kefu")){
+
+
+
+        }
+    }
+}

+ 41 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/FragmentUtils.java

@@ -0,0 +1,41 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+
+import android.app.Fragment;
+import android.content.Context;
+
+
+public class FragmentUtils {
+
+    public static final int SDK_REGISTER_TAG = 1;
+    public static final int SDK_LOGIN_TAG = 2;
+    public static final int SDK_PHONE_REGISTER_TAG = 3;
+    public static final int SDK_USER_SWITCH_ACCOUNT = 4;
+    public static final int SDK_PHONE_SET_LOGIN_PWD_TAG = 5;
+    public static final int SDK_RETRIEVE_PWD_TAG = 6;
+
+
+
+
+
+    public static Fragment getSdkFragment(Context context, int type){
+        switch (type) {
+            case SDK_REGISTER_TAG:
+                return UserRegisterFragment.instantiate(context,UserRegisterFragment.class.getName());
+            case SDK_RETRIEVE_PWD_TAG:
+                return UserRegisterFragment.instantiate(context,UserRetrievePwdFragment.class.getName());
+            case SDK_PHONE_REGISTER_TAG:
+                return UserRegisterFragment.instantiate(context,UserPhoneLoginFragment.class.getName());
+            case SDK_LOGIN_TAG:
+                return UserRegisterFragment.instantiate(context,UserAccountLoginFragment.class.getName());
+            case SDK_USER_SWITCH_ACCOUNT:
+                return UserRegisterFragment.instantiate(context,UserSwitchAccountLoginFragment.class.getName());
+            case SDK_PHONE_SET_LOGIN_PWD_TAG:
+                return UserRegisterFragment.instantiate(context,UserPhoneLoginSetpwdFragment.class.getName());
+                default:
+                return null;
+
+        }
+    }
+
+}

+ 151 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserAccountLoginFragment.java

@@ -0,0 +1,151 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+
+import static cn.yyxx.commsdk.core.constants.Constants.CLICK_INTERVAL;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+import cn.yyxx.commsdk.platform.hnyy.fragment.fragment.widget.TosUtil;
+
+public class UserAccountLoginFragment extends BaseFragment {
+
+    private EditText reg_account_edit,reg_pwd_edit;
+    private ImageView down_btn,iv_show_pwd;
+    private ImageButton close_btn;
+    private Button reg_compete_btn;
+    private TextView tv_fofget_pwd;
+    private boolean isShowPwd = false;
+
+
+     private ListView account_listview;
+
+
+    private ImageView showListView;
+
+    private boolean isShowList = false;
+
+    private TextView list_text;
+
+    private long clickLoginTime = 0L;
+
+    private String login_token;
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        View view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(),"hnyy_account_login"), container, false);
+        view.setClickable(true);
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        reg_account_edit = view.findViewById(ResourceUtil.getId(getActivity(),"reg_account_edit"));
+        reg_pwd_edit= view.findViewById(ResourceUtil.getId(getActivity(),"reg_pwd_edit"));
+
+        down_btn = view.findViewById(ResourceUtil.getId(getActivity(),"down_btn"));
+        down_btn.setOnClickListener(this);
+
+        iv_show_pwd = view.findViewById(ResourceUtil.getId(getActivity(),"iv_show_pwd"));
+        iv_show_pwd.setOnClickListener(this);
+
+
+        list_text  = view.findViewById(ResourceUtil.getId(getActivity(), "list_text"));
+
+        account_listview  =  view.findViewById(ResourceUtil.getId(getActivity(), "account_listview"));
+
+
+        showListView = view.findViewById(ResourceUtil.getId(getActivity(), "down_btn"));
+        showListView.setOnClickListener(this);
+
+        reg_compete_btn = view.findViewById(ResourceUtil.getId(getActivity(),"reg_compete_btn"));
+        reg_compete_btn.setOnClickListener(this);
+
+        tv_fofget_pwd = view.findViewById(ResourceUtil.getId(getActivity(),"tv_fofget_pwd"));
+        tv_fofget_pwd.setOnClickListener(this);
+
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        super.onClick(v);
+        int id = v.getId();
+        if (id == ResourceUtil.getId(getActivity(), "reg_compete_btn")){
+            if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
+
+                return;
+            }
+            clickLoginTime = System.currentTimeMillis();
+            startLogin(reg_account_edit.getText().toString(), reg_pwd_edit.getText().toString());
+
+        }else if(id == ResourceUtil.getId(getActivity(), "down_btn")){
+            /*	显示缓存账号	*/
+
+        }else if(id == ResourceUtil.getId(getActivity(), "iv_show_pwd")){
+
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "btn_account_login")){
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "close_btn")){
+
+        }else if(id == ResourceUtil.getId(getActivity(), "tv_fofget_pwd")){
+
+
+        }
+
+
+    }
+
+
+    private void startLogin(final String account, final String pwd) {
+        if (TextUtils.isEmpty(account)){
+            new TosUtil(getActivity(),TosUtil.TOAST_ERROR, getString(ResourceUtil.getStringId(getActivity(), "hnyy_band_need_account"))).show();
+
+            return;
+        }
+        if (TextUtils.isEmpty(pwd)){
+            new TosUtil(getActivity(),TosUtil.TOAST_ERROR, getString(ResourceUtil.getStringId(getActivity(), "hnyy_band_need_pwd"))).show();
+
+            return;
+        }
+
+        if(account.length()<6)
+        {
+            new TosUtil(getActivity(),TosUtil.TOAST_ERROR, getString(ResourceUtil.getStringId(getActivity(), "hnyy_account_limit_6"))).show();
+
+            return;
+        }
+        if(pwd.length()<6)
+        {
+            new TosUtil(getActivity(),TosUtil.TOAST_ERROR, getString(ResourceUtil.getStringId(getActivity(), "hnyy_pwd_limit_6"))).show();
+
+            return;
+        }
+
+
+
+    }
+
+
+}

+ 208 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserPhoneLoginFragment.java

@@ -0,0 +1,208 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+
+import static cn.yyxx.commsdk.core.constants.Constants.CLICK_INTERVAL;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+
+
+public class UserPhoneLoginFragment extends BaseFragment {
+
+
+    private EditText et_user_phone,et_user_code;
+    private CheckBox cb_register;
+    private TextView tv_tip,tv_private_policy;
+    private Button btn_get_code,btn_account_login,btn_guest_login,btn_reg_compete;
+    private CodeVerifyTimeCount codeVerifyTimeCount;
+    private long clickLoginTime = 0L;
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        View view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(),"hnyy_phone_login"), container, false);
+        view.setClickable(true);
+
+
+
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        et_user_phone = view.findViewById(ResourceUtil.getId(getActivity(),"et_user_phone"));
+        et_user_code = view.findViewById(ResourceUtil.getId(getActivity(),"et_user_code"));
+        cb_register = view.findViewById(ResourceUtil.getId(getActivity(),"cb_register"));
+
+        tv_tip = view.findViewById(ResourceUtil.getId(getActivity(),"tv_tip"));
+        tv_tip.setOnClickListener(this);
+        tv_private_policy = view.findViewById(ResourceUtil.getId(getActivity(),"tv_private_policy"));
+        tv_private_policy.setOnClickListener(this);
+        btn_get_code = view.findViewById(ResourceUtil.getId(getActivity(),"btn_get_code"));
+        btn_get_code.setOnClickListener(this);
+        btn_account_login = view.findViewById(ResourceUtil.getId(getActivity(),"btn_account_login"));
+        btn_account_login.setOnClickListener(this);
+        btn_guest_login = view.findViewById(ResourceUtil.getId(getActivity(),"btn_guest_login"));
+        btn_guest_login.setOnClickListener(this);
+        btn_reg_compete = view.findViewById(ResourceUtil.getId(getActivity(),"btn_reg_compete"));
+        btn_reg_compete.setOnClickListener(this);
+
+
+
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        super.onClick(v);
+        int id = v.getId();
+        if(id == ResourceUtil.getId(getActivity(), "tv_tip")){
+
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "tv_private_policy")){
+
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "btn_reg_compete")){
+
+            if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
+
+                return;
+            }
+            clickLoginTime = System.currentTimeMillis();
+
+            registerWithPhone(getActivity());
+
+        }else if(id == ResourceUtil.getId(getActivity(), "btn_get_code")){
+
+            String phone =  et_user_phone.getText().toString();
+
+            if (phone.length() < 10) {
+
+
+                return;
+            }
+            getPhoneCaptcha(getActivity(),phone,"register");
+
+        }else if(id == ResourceUtil.getId(getActivity(), "btn_account_login")){
+
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_LOGIN_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+
+        }else if(id == ResourceUtil.getId(getActivity(), "btn_guest_login")){
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_REGISTER_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+
+        }
+
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (codeVerifyTimeCount != null){
+            codeVerifyTimeCount.cancel();
+        }
+
+    }
+
+    private void registerWithPhone(final Activity activity){
+        final String code = et_user_code.getText().toString();
+        final String account = et_user_phone.getText().toString();
+
+
+        if(account.length() < 10 || TextUtils.isEmpty(account))
+        {
+
+            return;
+        }
+
+        if(code.length() < 4 || TextUtils.isEmpty(code))
+        {
+
+            return;
+        }
+
+        if (!cb_register.isChecked()){
+
+
+            return;
+
+        }
+
+
+
+
+    }
+
+
+    private void  getPhoneCaptcha(Activity activity, String phone, String action){
+
+    }
+    private void getCodeSuccess() {
+        btn_get_code.setEnabled(false);
+        btn_get_code.setText("60s");
+
+        codeVerifyTimeCount = new CodeVerifyTimeCount(60000, 1000);
+        codeVerifyTimeCount.start();
+    }
+
+    class CodeVerifyTimeCount extends CountDownTimer {
+
+        public CodeVerifyTimeCount(long millisInFuture, long countDownInterval) {
+            super(millisInFuture, countDownInterval);
+            // TODO Auto-generated constructor stub
+        }
+
+        @Override
+        public void onTick(long millisUntilFinished) {
+            // TODO Auto-generated method stub
+            btn_get_code.setText(millisUntilFinished / 1000 + "s");
+
+        }
+
+        @Override
+        public void onFinish() {
+            // TODO Auto-generated method stub
+            btn_get_code.setEnabled(true);
+
+            btn_get_code.setText(ResourceUtil.getStringId(getActivity(), "hnyy_get_phone_code"));
+        }
+
+    }
+
+    public interface CaptchaCallback {
+
+        void onGetSuccess(String msg);
+        void onGetFailed(String msg);
+
+
+    }
+
+    public interface PhoneLoginCallback {
+
+        void onPhoneLoginSuccess(String msg);
+        void onPhoneLoginFailed(String msg);
+        void onPhoneNewLogin();
+
+    }
+
+
+
+
+}

+ 157 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserPhoneLoginSetpwdFragment.java

@@ -0,0 +1,157 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+
+import static cn.yyxx.commsdk.core.constants.Constants.CLICK_INTERVAL;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+
+
+public class UserPhoneLoginSetpwdFragment extends BaseFragment {
+
+
+    private EditText reg_pwd_edit;
+    private CheckBox cb_register;
+    private TextView tv_tip,tv_private_policy;
+    private Button reg_compete_btn;
+    private ImageButton close_btn;
+    private long clickLoginTime = 0L;
+
+    private String account,code;
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        View view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(),"hnyy_phone_register_setpwd_dialog"), container, false);
+        view.setClickable(true);
+
+        Bundle bundle = getArguments();
+        account = bundle.getString("account");
+        code = bundle.getString("code");
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        reg_pwd_edit = view.findViewById(ResourceUtil.getId(getActivity(),"reg_pwd_edit"));
+
+        cb_register = view.findViewById(ResourceUtil.getId(getActivity(),"cb_register"));
+
+        tv_tip = view.findViewById(ResourceUtil.getId(getActivity(),"tv_tip"));
+        tv_tip.setOnClickListener(this);
+
+        tv_private_policy = view.findViewById(ResourceUtil.getId(getActivity(),"tv_private_policy"));
+        tv_private_policy.setOnClickListener(this);
+
+        reg_compete_btn = view.findViewById(ResourceUtil.getId(getActivity(),"reg_compete_btn"));
+        reg_compete_btn.setOnClickListener(this);
+
+
+        close_btn = view.findViewById(ResourceUtil.getId(getActivity(),"close_btn"));
+
+        close_btn.setOnClickListener(this);
+    }
+
+    @Override
+    public void onClick(View v) {
+        super.onClick(v);
+        int id = v.getId();
+        if(id == ResourceUtil.getId(getActivity(), "tv_tip")){
+
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "tv_private_policy")){
+
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "reg_compete_btn")){
+
+            if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
+
+                return;
+            }
+            clickLoginTime = System.currentTimeMillis();
+
+            registerWithPhone(getActivity());
+
+        }else if(id == ResourceUtil.getId(getActivity(), "close_btn")){
+
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_PHONE_REGISTER_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+
+
+        }
+
+
+
+    }
+
+
+
+    private void registerWithPhone(final Activity activity){
+
+        final String pwd = reg_pwd_edit.getText().toString();
+
+        String userInfo ="";
+
+        if(account.length() < 10 || TextUtils.isEmpty(account))
+        {
+
+
+            return;
+        }
+        if(pwd.length() < 6 || TextUtils.isEmpty(pwd))
+        {
+
+
+
+            return;
+        }
+        if(code.length() < 4 || TextUtils.isEmpty(code))
+        {
+
+            return;
+        }
+
+        if (!cb_register.isChecked()){
+
+
+            return;
+
+        }
+
+
+    }
+
+
+
+
+
+
+    public interface PhoneRegisterCallback {
+
+        void onRegisterSuccess(String msg);
+        void onRegisterFailed(String msg);
+
+
+    }
+
+
+
+}

+ 178 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserRegisterFragment.java

@@ -0,0 +1,178 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+
+
+import static cn.yyxx.commsdk.core.constants.Constants.CLICK_INTERVAL;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+import cn.yyxx.commsdk.platform.hnyy.fragment.fragment.widget.TosUtil;
+
+
+public class UserRegisterFragment extends BaseFragment {
+    private EditText reg_account_edit,reg_pwd_edit;
+    private ImageView iv_clear_text,iv_show_pwd;
+    private TextView tv_tip,tv_private_policy;
+    private Button reg_compete_btn,btn_account_login,btn_guest_login;
+    private ImageButton close_btn;
+    private CheckBox cb_register;
+    private boolean isShowPwd = true;
+    private long clickLoginTime = 0L;
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        View view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(),"hnyy_register_dialog"), container, false);
+        view.setClickable(true);
+
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        reg_account_edit = view.findViewById(ResourceUtil.getId(getActivity(),"reg_account_edit"));
+        reg_pwd_edit= view.findViewById(ResourceUtil.getId(getActivity(),"reg_pwd_edit"));
+
+
+
+
+        cb_register= view.findViewById(ResourceUtil.getId(getActivity(),"cb_register"));
+
+        iv_clear_text = view.findViewById(ResourceUtil.getId(getActivity(),"iv_clear_text"));
+        iv_clear_text.setOnClickListener(this);
+
+        iv_show_pwd = view.findViewById(ResourceUtil.getId(getActivity(),"iv_show_pwd"));
+        iv_show_pwd.setOnClickListener(this);
+
+        tv_tip = view.findViewById(ResourceUtil.getId(getActivity(),"tv_tip"));
+        tv_tip.setOnClickListener(this);
+
+        tv_private_policy = view.findViewById(ResourceUtil.getId(getActivity(),"tv_private_policy"));
+        tv_private_policy.setOnClickListener(this);
+
+        reg_compete_btn = view.findViewById(ResourceUtil.getId(getActivity(),"reg_compete_btn"));
+        reg_compete_btn.setOnClickListener(this);
+
+        btn_account_login = view.findViewById(ResourceUtil.getId(getActivity(),"btn_account_login"));
+        btn_account_login.setOnClickListener(this);
+
+        btn_guest_login = view.findViewById(ResourceUtil.getId(getActivity(),"btn_guest_login"));
+        btn_guest_login.setOnClickListener(this);
+
+
+        close_btn = view.findViewById(ResourceUtil.getId(getActivity(),"close_btn"));
+        close_btn.setOnClickListener(this);
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        super.onClick(v);
+        int id = v.getId();
+        if (id == ResourceUtil.getId(getActivity(), "reg_compete_btn")){
+            if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
+
+                return;
+            }
+            clickLoginTime = System.currentTimeMillis();
+            startRegister(reg_account_edit.getText().toString(), reg_pwd_edit.getText().toString());
+        }else if(id == ResourceUtil.getId(getActivity(), "iv_clear_text")){
+            reg_account_edit.setText("");
+        }else if(id == ResourceUtil.getId(getActivity(), "iv_show_pwd")){
+
+            if (isShowPwd) {
+
+                isShowPwd = false;
+                reg_pwd_edit.setTransformationMethod(PasswordTransformationMethod.getInstance());
+                iv_show_pwd.setImageResource(ResourceUtil.getMipmapId(getActivity(), "hnyy_close_eye"));
+
+
+            } else {
+                isShowPwd = true;
+                reg_pwd_edit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+                iv_show_pwd.setImageResource(ResourceUtil.getMipmapId(getActivity(), "hnyy_open_eye"));
+            }
+
+        }else if(id == ResourceUtil.getId(getActivity(), "tv_tip")){
+
+
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "tv_private_policy")){
+
+
+
+        }else if(id == ResourceUtil.getId(getActivity(), "btn_account_login")){
+
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_PHONE_REGISTER_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+
+        }else if(id == ResourceUtil.getId(getActivity(), "btn_guest_login")){
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_LOGIN_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+        }else if(id == ResourceUtil.getId(getActivity(), "close_btn")){
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_PHONE_REGISTER_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+        }
+    }
+
+
+
+
+
+    private void startRegister(final String account, final String pwd) {
+        if (!cb_register.isChecked()){
+
+
+            return;
+        }
+        if (TextUtils.isEmpty(account)){
+
+            new TosUtil(getActivity(),TosUtil.TOAST_ERROR,  getActivity().getString(ResourceUtil.getStringId(getActivity(), "hnyy_band_need_account"))).show();
+
+
+            return;
+        }
+
+        if (TextUtils.isEmpty(pwd)){
+            new TosUtil(getActivity(),TosUtil.TOAST_ERROR,  getActivity().getString(ResourceUtil.getStringId(getActivity(), "hnyy_band_need_pwd"))).show();
+
+
+            return;
+        }
+
+        if (account.length() < 6 || pwd.length() > 20) {
+            new TosUtil(getActivity(),TosUtil.TOAST_ERROR,  getActivity().getString(ResourceUtil.getStringId(getActivity(), "hnyy_regist_account_error"))).show();
+
+
+            return;
+        }
+
+        if (pwd.length() < 6 || pwd.length() > 20) {
+
+            new TosUtil(getActivity(), TosUtil.TOAST_ERROR, getActivity().getString(ResourceUtil.getStringId(getActivity(), "hnyy_regist_pwd_error"))).show();
+            return;
+        }
+
+
+    }
+
+}

+ 168 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserRetrievePwdFragment.java

@@ -0,0 +1,168 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+import cn.yyxx.commsdk.platform.hnyy.fragment.fragment.widget.TosUtil;
+
+public class UserRetrievePwdFragment extends BaseFragment {
+
+    private EditText et_user_phone,et_user_code,et_user_pwd;
+    private Button btn_get_code,reg_compete_btn;
+    private ImageButton close_btn;
+
+    private TextView tv_tip_2;
+
+    private TimeCount timer;
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        View view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(),"hnyy_retrieve_pwd"), container, false);
+        view.setClickable(true);
+
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        et_user_phone = view.findViewById(ResourceUtil.getId(getActivity(), "et_user_phone"));
+        et_user_code = view.findViewById(ResourceUtil.getId(getActivity(), "et_user_code"));
+        et_user_pwd  = view.findViewById(ResourceUtil.getId(getActivity(), "et_user_pwd"));
+        btn_get_code  = view.findViewById(ResourceUtil.getId(getActivity(), "btn_get_code"));
+        reg_compete_btn  = view.findViewById(ResourceUtil.getId(getActivity(), "reg_compete_btn"));
+
+        tv_tip_2 = view.findViewById(ResourceUtil.getId(getActivity(), "tv_tip_2"));
+        tv_tip_2.setOnClickListener(this);
+        close_btn  = view.findViewById(ResourceUtil.getId(getActivity(), "close_btn"));
+
+        btn_get_code.setOnClickListener(this);
+        close_btn.setOnClickListener(this);
+        reg_compete_btn.setOnClickListener(this);
+
+        timer = new TimeCount(60000, 1000);
+    }
+
+    @Override
+    public void onClick(View v) {
+        super.onClick(v);
+
+        int id = v.getId();
+        if (id == ResourceUtil.getId(getActivity(), "btn_get_code")) {
+            String phone =  et_user_phone.getText().toString();
+
+            if (phone.length() < 10) {
+                new TosUtil(getActivity(),TosUtil.TOAST_ERROR, getString(ResourceUtil.getStringId(getActivity(), "hnyy_pls_input_right_phone"))).show();
+                return;
+            }
+            getPhoneCaptcha(getActivity(),phone,"modify_pwd");
+        }else if (id == ResourceUtil.getId(getActivity(), "reg_compete_btn")) {
+            String phone =  et_user_phone.getText().toString();
+            String code = et_user_code.getText().toString();
+            String pwd = et_user_pwd.getText().toString();
+            if (phone.length() < 10) {
+
+                new TosUtil(getActivity(),TosUtil.TOAST_ERROR,getString(ResourceUtil.getStringId(getActivity(), "hnyy_pls_input_right_phone"))).show();
+
+                return;
+            }
+            if(code.length() < 4 || TextUtils.isEmpty(code))
+            {
+                new TosUtil(getActivity(),TosUtil.TOAST_ERROR,getString(ResourceUtil.getStringId(getActivity(), "hnyy_pls_input_right_code"))).show();
+
+
+                return;
+            }
+            if(pwd.length() < 6 || TextUtils.isEmpty(pwd))
+            {
+                new TosUtil(getActivity(),TosUtil.TOAST_ERROR, getString(ResourceUtil.getStringId(getActivity(), "hnyy_pwd_limit_6"))).show();
+
+                return;
+            }
+            resetPwdWithPhone(getActivity(),phone,code,pwd);
+
+        }else if (id == ResourceUtil.getId(getActivity(), "close_btn")) {
+
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_LOGIN_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+
+        }else if (id == ResourceUtil.getId(getActivity(), "tv_tip_2")) {
+
+        }
+
+    }
+
+
+    private void  getPhoneCaptcha(Activity activity, String phone, String action){
+
+    }
+
+
+    private void getCodeSuccess() {
+        btn_get_code.setEnabled(false);
+        btn_get_code.setText("60s");
+
+
+        timer.start();
+    }
+
+    class TimeCount extends CountDownTimer {
+
+        public TimeCount(long millisInFuture, long countDownInterval) {
+            super(millisInFuture, countDownInterval);
+            // TODO Auto-generated constructor stub
+        }
+
+        @Override
+        public void onTick(long millisUntilFinished) {
+            // TODO Auto-generated method stub
+            btn_get_code.setText(millisUntilFinished / 1000 + "s");
+
+        }
+
+        @Override
+        public void onFinish() {
+            // TODO Auto-generated method stub
+            btn_get_code.setEnabled(true);
+            btn_get_code.setText(ResourceUtil.getStringId(getActivity(), "hnyy_get_phone_code"));
+        }
+
+    }
+    public interface ResetPwdCallback {
+
+        void onResetSuccess(String msg);
+        void onResetFailed(String msg);
+
+
+    }
+
+    private void resetPwdWithPhone(final Activity activity, final String phone, String code, final String pwd) {
+
+    }
+
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (timer != null){
+            timer.cancel();
+        }
+
+    }
+}

+ 82 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/UserSwitchAccountLoginFragment.java

@@ -0,0 +1,82 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment;
+
+
+import static cn.yyxx.commsdk.core.constants.Constants.CLICK_INTERVAL;
+
+import android.app.Fragment;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+
+public class UserSwitchAccountLoginFragment extends BaseFragment{
+
+    private TextView ib_edit_account,tv_other_login_type;
+
+    private boolean isEditStatus = false;
+
+    private long clickLoginTime = 0L;
+
+    @Nullable
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
+        View view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(),"hnyy_switch_account_login"), container, false);
+        view.setClickable(true);
+        return view;
+
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        ib_edit_account = view.findViewById(ResourceUtil.getId(getActivity(),"ib_edit_account"));
+
+        ib_edit_account.setOnClickListener(this);
+
+        tv_other_login_type = view.findViewById(ResourceUtil.getId(getActivity(),
+                "tv_other_login_type"));
+        tv_other_login_type.setOnClickListener(this);
+
+
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        super.onClick(v);
+        int id = v.getId();
+        if (id == ResourceUtil.getId(getActivity(), "ib_edit_account")) {
+
+        }else  if (id == ResourceUtil.getId(getActivity(), "all_item_1")) {
+
+
+        }else  if (id == ResourceUtil.getId(getActivity(), "all_item_2")) {
+
+        }else  if (id == ResourceUtil.getId(getActivity(), "all_item_3")) {
+
+        }else  if (id == ResourceUtil.getId(getActivity(), "tv_other_login_type")) {
+            Fragment accountLoginFragment = FragmentUtils.getSdkFragment(getActivity(),FragmentUtils.SDK_PHONE_REGISTER_TAG);
+            replaceFragmentToActivity(getFragmentManager(),accountLoginFragment,ResourceUtil.getId(getActivity(),"hnyy_content"));
+
+        }
+    }
+
+    private void startLogin(final String account, final String pwd,final String login_token){
+        if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
+
+            return;
+        }
+        clickLoginTime = System.currentTimeMillis();
+
+
+
+    }
+}

+ 57 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/hnyy/fragment/fragment/widget/TosUtil.java

@@ -0,0 +1,57 @@
+package cn.yyxx.commsdk.platform.hnyy.fragment.fragment.widget;
+
+import android.content.Context;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import cn.yyxx.commsdk.core.utils.ResourceUtil;
+
+
+public class TosUtil {
+
+    private Toast mToast;
+    private TextView mTextView;
+    private ImageView mImageView;
+    public static String TOAST_GREEN = "green";
+    public static String TOAST_ERROR = "error";
+    public TosUtil(Context context, String color, String msg) {
+
+
+        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+        View view = inflater.inflate(ResourceUtil.getLayoutId(context, "hnyy_toast_style"), null);
+
+
+        mTextView = view.findViewById(ResourceUtil.getId(context, "toast_text"));
+        mTextView.setText(msg);
+
+        mImageView = view.findViewById(ResourceUtil.getId(context, "toast_iv"));
+        if (color.equals(TOAST_GREEN)) {
+            mImageView.setImageResource(ResourceUtil.getMipmapId(context, "hnyy_tips_success"));
+        }
+        else {
+            mImageView.setImageResource(ResourceUtil.getMipmapId(context, "hnyy_tips_error"));
+        }
+
+        if (mToast == null) {
+            mToast = new Toast(context);
+
+        }
+
+        mToast.setDuration(Toast.LENGTH_SHORT);
+        mToast.setView(view);
+        mToast.setGravity(Gravity.CENTER,0,0);
+    }
+
+
+    public void show() {
+        mToast.show();
+
+    }
+
+
+}

+ 41 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/user/UserSession.java

@@ -0,0 +1,41 @@
+package cn.yyxx.commsdk.platform.user;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class UserSession {
+
+    public String login_token="",uname = "",channel_uid = "",password="";
+
+
+    public void reset(){
+        login_token="";
+        uname = "";
+        password = "";
+        channel_uid = "";
+    }
+
+    public JSONObject toJSONObject(){
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.put("login_token", login_token);
+            jsonObject.put("uname", uname);
+            jsonObject.put("password", password);
+            jsonObject.put("channel_uid", channel_uid);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return jsonObject;
+
+    }
+
+    @Override
+    public String toString() {
+        return "UserSession{" +
+                "login_token='" + login_token + '\'' +
+                ", uname='" + uname + '\'' +
+                ", channel_uid='" + channel_uid + '\'' +
+                ", password='" + password + '\'' +
+                '}';
+    }
+}

+ 201 - 0
library_platform/src/main/java/cn/yyxx/commsdk/platform/user/UserSessionManager.java

@@ -0,0 +1,201 @@
+package cn.yyxx.commsdk.platform.user;
+
+import android.text.TextUtils;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+
+import cn.yyxx.commsdk.base.utils.Logger;
+import cn.yyxx.commsdk.core.utils.MMKVUtils;
+import cn.yyxx.support.HostModelUtils;
+import cn.yyxx.support.JsonUtils;
+
+public class UserSessionManager {
+
+    private static volatile UserSessionManager mInstance;
+
+
+    String model = "online";
+
+    private UserSessionManager() {
+
+    }
+
+    public static UserSessionManager getInstance() {
+        if (null == mInstance) {
+            synchronized (UserSessionManager.class) {
+                if (null == mInstance) {
+                    mInstance = new UserSessionManager();
+                }
+            }
+        }
+        return mInstance;
+    }
+
+
+    private static ArrayList<UserSession> toList(String json) {
+        if (TextUtils.isEmpty(json)) {
+            return null;
+        }
+        Logger.d("文件读出来:" + json);
+        ArrayList<UserSession> infoList = null;
+        try {
+            JSONObject jsonObject = new JSONObject(json);
+            infoList = new ArrayList<>();
+            if (!JsonUtils.hasJsonKey(jsonObject, "info")) {
+                return null;
+            }
+            JSONArray infoObject = jsonObject.getJSONArray("info");
+            for (int i = 0; i < infoObject.length(); i++) {
+                UserSession userSession = new UserSession();
+                JSONObject obj = infoObject.getJSONObject(i);
+                if (JsonUtils.hasJsonKey(obj, "uname")) {
+                    userSession.uname = obj.getString("uname");
+                }
+                if (JsonUtils.hasJsonKey(obj, "password")) {
+                    userSession.password = obj.getString("password");
+                }
+                if (JsonUtils.hasJsonKey(obj, "login_token")) {
+                    userSession.login_token = obj.getString("login_token");
+                }
+                if (JsonUtils.hasJsonKey(obj, "channel_uid")) {
+                    userSession.channel_uid = obj.getString("channel_uid");
+                }
+
+                infoList.add(userSession);
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return infoList;
+    }
+
+
+
+    public synchronized void saveSession(UserSession userSession) {
+        if (userSession == null) {
+            return;
+        }
+        ArrayList<UserSession> userList = getLocalSession();
+        if (null == userList) {
+            userList = new ArrayList<>();
+        }
+        if (userList.size() > 0) {
+            boolean isSessionExist = false;
+            for (int i = 0; i < userList.size(); i++) {
+                //TODO 当前登录用户已经存在用户列表里,更新用户数据(移除旧的,在0的位置插入)
+                UserSession session = userList.get(i);
+                if (userSession.uname.equals(session.uname)) {
+                    isSessionExist = true;
+                    //移除
+                    userList.remove(session);
+                    userList.add(0, userSession);
+                    break;
+                }
+            }
+            if (!isSessionExist) {
+                //TODO 当前登录用户不存在用户列表里,在0的位置插入
+                userList.add(0, userSession);
+            }
+        } else {
+            userList.add(userSession);
+        }
+
+        JSONArray jsonArray = new JSONArray();
+        JSONObject jsonObject = new JSONObject();
+        for (UserSession session : userList) {
+            jsonArray.put(session.toJSONObject());
+        }
+
+        try {
+            jsonObject.put("info", jsonArray);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        MMKVUtils.getInstance().userKV.encode(model, jsonObject.toString());
+    }
+
+
+
+
+
+    public UserSession getLocalLastSession() {
+        ArrayList<UserSession> list = getLocalSession();
+        if (null == list) {
+            return null;
+        }
+        UserSession session = list.get(0);
+        Logger.d("最后登陆的用户信息:" + session.toString());
+        return session;
+
+    }
+
+
+    public ArrayList<UserSession> getLocalSessionLimit3() {
+        ArrayList<UserSession> list = getLocalSession();
+        if (null == list) {
+            return null;
+        }
+        if (list.size() <= 3) {
+            return list;
+        } else {
+            ArrayList<UserSession> temp = new ArrayList<>();
+            for (int i = 0; i < list.size(); i++) {
+                UserSession session = list.get(i);
+                temp.add(session);
+                if (temp.size() == 3) {
+                    break;
+                }
+            }
+            return temp;
+        }
+    }
+
+
+    public ArrayList<UserSession> getLocalSession() {
+        String json = MMKVUtils.getInstance().userKV.decodeString(model, "");
+        return toList(json);
+    }
+
+    /**
+     * 删除用户信息
+     *
+     * @param uname
+     */
+    public synchronized void removeSession(String uname) {
+        ArrayList<UserSession> userLists = getLocalSession();
+        if (userLists == null || userLists.size() == 0) {
+            return;
+        }
+        UserSession deleteUser = null;
+        for (UserSession session : userLists) {
+            if (session.uname.equals(uname)) {
+                deleteUser = session;
+                break;
+            }
+        }
+        if (deleteUser != null) {
+            userLists.remove(deleteUser);
+        }
+
+        JSONArray jsonArray = new JSONArray();
+        JSONObject jsonObject = new JSONObject();
+        for (UserSession session : userLists) {
+            Logger.d(session.toString());
+            jsonArray.put(session.toJSONObject());
+        }
+
+        try {
+            jsonObject.put("info", jsonArray);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        Logger.d("写入用户信息:" + jsonObject.toString());
+
+        MMKVUtils.getInstance().userKV.encode(model, jsonObject.toString());
+    }
+
+}

+ 11 - 0
library_platform/src/main/res/anim/hnyy_rotate_anim.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <rotate
+        android:duration="1000"
+        android:fromDegrees="0"
+        android:pivotX="50%"
+        android:pivotY="50%"
+        android:repeatCount="infinite"
+        android:interpolator="@android:anim/linear_interpolator"
+        android:toDegrees="360" />
+</set>

+ 12 - 0
library_platform/src/main/res/drawable/hnyy_btn_account_bg.xml

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

+ 12 - 0
library_platform/src/main/res/drawable/hnyy_btn_exit_bg.xml

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

+ 13 - 0
library_platform/src/main/res/drawable/hnyy_btn_guest_bg.xml

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

+ 7 - 0
library_platform/src/main/res/drawable/hnyy_checkbox_select.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:drawable="@mipmap/hnyy_checkbox_select" android:state_checked="true"/>
+    <item android:drawable="@mipmap/hnyy_checkbox_unselect" android:state_checked="false"/>
+
+</selector>

+ 5 - 0
library_platform/src/main/res/drawable/hnyy_color_white_40.xml

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

+ 5 - 0
library_platform/src/main/res/drawable/hnyy_color_white_70.xml

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

+ 6 - 0
library_platform/src/main/res/drawable/hnyy_common_wv_bg.xml

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

+ 5 - 0
library_platform/src/main/res/drawable/hnyy_dialog_ios_bg.xml

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

+ 13 - 0
library_platform/src/main/res/drawable/hnyy_edittext_bg.xml

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

+ 9 - 0
library_platform/src/main/res/drawable/hnyy_exit_bg.xml

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

+ 13 - 0
library_platform/src/main/res/drawable/hnyy_game_float_menu_bg.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/hnyy_white"/>
+    <stroke
+        android:width="1px"
+        android:color="@color/hnyy_green_line"/>
+    <corners
+        android:bottomLeftRadius="50dp"
+        android:bottomRightRadius="50dp"
+        android:topLeftRadius="50dp"
+        android:topRightRadius="50dp"/>
+
+</shape>

+ 11 - 0
library_platform/src/main/res/drawable/hnyy_hide_float_view_bg.xml

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

+ 9 - 0
library_platform/src/main/res/drawable/hnyy_login_bg.xml

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

+ 12 - 0
library_platform/src/main/res/drawable/hnyy_login_button_grayed_style.xml

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

+ 12 - 0
library_platform/src/main/res/drawable/hnyy_login_button_style.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+
+
+
+
+
+        <gradient android:type="linear" android:useLevel="true" android:startColor="@color/hnyy_text_light_blue_color" android:endColor="@color/hnyy_text_deep_green_color" android:angle="180" />
+        <corners  android:radius="5dp" />
+
+
+</shape>

+ 5 - 0
library_platform/src/main/res/drawable/hnyy_login_list_bg.xml

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

+ 8 - 0
library_platform/src/main/res/drawable/hnyy_login_list_btn_yellow_bg.xml

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

+ 7 - 0
library_platform/src/main/res/drawable/hnyy_login_list_delete_bg.xml

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

+ 16 - 0
library_platform/src/main/res/drawable/hnyy_progress_drawable_white.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<animation-list android:oneshot="false"
+                xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_01" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_02" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_03" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_04" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_05" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_06" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_07" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_08" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_09" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_10" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_11" />
+    <item android:duration="83" android:drawable="@mipmap/hnyy_ic_loading_white_12" />
+</animation-list>

+ 10 - 0
library_platform/src/main/res/drawable/hnyy_radius_white_10dp.xml

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

+ 10 - 0
library_platform/src/main/res/drawable/hnyy_radius_white_12dp.xml

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

+ 8 - 0
library_platform/src/main/res/drawable/hnyy_radius_white_1dp.xml

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

+ 164 - 0
library_platform/src/main/res/layout/hnyy_account_login.xml

@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="360dp"
+    android:layout_height="280dp"
+    android:background="@drawable/hnyy_login_bg"
+    >
+    <RelativeLayout
+        android:id="@+id/rl1"
+        android:layout_width="match_parent"
+        android:layout_height="60dp"
+        >
+
+        <ImageButton
+            android:id="@+id/close_btn"
+            android:layout_width="26dp"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="30dp"
+            android:layout_alignParentLeft="true"
+            android:src="@mipmap/hnyy_reback"
+            android:background="@color/hnyy_transparent"
+            />
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/hnyy_account_login"
+            android:textSize="19sp"
+            android:layout_centerInParent="true"
+            android:textColor="@color/hnyy_edittext_bg_deep_gray"
+            />
+        <ImageButton
+            android:id="@+id/btn_kefu"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_marginRight="30dp"
+            android:layout_centerVertical="true"
+            android:layout_alignParentRight="true"
+            android:src="@mipmap/hnyy_kefu"
+            android:background="@color/hnyy_transparent"
+            />
+
+    </RelativeLayout>
+    <RelativeLayout
+        android:id="@+id/ll1"
+        android:layout_below="@+id/rl1"
+        android:layout_width="300dp"
+        android:layout_height="wrap_content"
+
+        android:layout_centerInParent="true" >
+
+
+        <EditText
+            android:id="@+id/reg_account_edit"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:digits="0123456789abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+            android:gravity="center_vertical"
+            android:hint="@string/hnyy_input_your_account"
+            android:maxLength="20"
+            android:maxLines="1"
+            android:paddingLeft="20dp"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:textSize="14dp"
+            android:textColor="@color/hnyy_text_black"/>
+
+        <ImageView
+            android:id="@+id/down_btn"
+            android:layout_alignRight="@+id/reg_account_edit"
+            android:layout_width="45dp"
+            android:layout_height="40dp"
+            android:src="@mipmap/hnyy_arrow_normal"
+            android:padding="15dp"
+            android:layout_marginRight="3dp"
+            />
+
+        <EditText
+            android:id="@+id/reg_pwd_edit"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_below="@id/reg_account_edit"
+            android:layout_marginTop="16dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:digits="0123456789abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+            android:gravity="center_vertical"
+            android:hint="@string/hnyy_input_your_pwd"
+            android:inputType="textPassword"
+            android:maxLength="20"
+            android:maxLines="1"
+            android:paddingLeft="20dp"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:textSize="14dp"
+            android:textColor="@color/hnyy_text_black"/>
+
+        <ImageView
+            android:id="@+id/iv_show_pwd"
+            android:layout_below="@id/reg_account_edit"
+            android:layout_marginTop="15dp"
+            android:layout_alignRight="@+id/reg_pwd_edit"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:src="@mipmap/hnyy_close_eye"
+            android:padding="10dp"
+            android:layout_marginRight="5dp"
+            />
+
+
+        <Button
+            android:id="@+id/reg_compete_btn"
+            android:layout_width="300dp"
+            android:layout_height="40dp"
+            android:layout_below="@id/iv_show_pwd"
+
+            android:layout_marginTop="15dp"
+            android:background="@drawable/hnyy_login_button_style"
+            android:layout_centerHorizontal="true"
+            android:text="@string/hnyy_login"
+            android:textColor="@color/hnyy_white"
+            android:textSize="16sp" />
+    </RelativeLayout>
+
+    <TextView
+        android:id="@+id/tv_fofget_pwd"
+        android:layout_marginTop="15dp"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/hnyy_forget_pwd"
+        android:textSize="16sp"
+        android:textColor="@color/hnyy_text_cyan_color"
+        android:layout_centerHorizontal="true"
+        android:layout_below="@id/ll1"
+        />
+
+
+    <ListView
+        android:layout_marginTop="100dp"
+        android:layout_centerHorizontal="true"
+        android:id="@+id/account_listview"
+        android:layout_width="300dp"
+        android:layout_height="160dp"
+        android:divider="@null"
+        android:visibility="gone"
+        />
+
+
+    <TextView
+        android:id="@+id/list_text"
+        android:layout_width="300dp"
+        android:layout_height="50dp"
+        android:gravity="center_vertical"
+        android:layout_centerHorizontal="true"
+        android:background="@drawable/hnyy_edittext_bg"
+        android:paddingLeft="10dp"
+        android:text="@string/hnyy_no_record"
+        android:layout_marginTop="100dp"
+        android:visibility="gone"
+        android:textSize="18sp"
+        android:textColor="@color/hnyy_text_black"
+
+        />
+
+
+</RelativeLayout>

+ 24 - 0
library_platform/src/main/res/layout/hnyy_dialog_progress.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="wrap_content"
+              android:layout_height="wrap_content"
+              android:background="@mipmap/hnyy_ic_loading_bg"
+              android:gravity="center"
+              android:orientation="vertical"
+              android:padding="16.0dip" >
+
+    <ProgressBar
+            android:layout_width="30.0dip"
+            android:layout_height="30.0dip"
+            android:indeterminateDrawable="@drawable/hnyy_progress_drawable_white" />
+
+    <TextView
+            android:id="@+id/id_tv_loadingmsg"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_marginTop="8.0dip"
+            android:textColor="#fff"
+            android:textSize="16.0dip" />
+
+</LinearLayout>

+ 45 - 0
library_platform/src/main/res/layout/hnyy_edittext_style.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+xmlns:android="http://schemas.android.com/apk/res/android"
+android:id="@+id/ll1"
+android:layout_below="@+id/rl1"
+android:layout_width="300dp"
+android:layout_height="wrap_content"
+    android:background="@drawable/hnyy_edittext_bg"
+    >
+
+    <ImageView
+        android:id="@+id/iv_left_view"
+        android:layout_width="18dp"
+        android:layout_height="20dp"
+        android:background="@mipmap/hnyy_account_login"
+        android:layout_centerVertical="true"
+        android:layout_marginLeft="13dp"
+        />
+
+    <EditText
+        android:layout_toRightOf="@id/iv_left_view"
+        android:id="@+id/et_input"
+        android:layout_width="225dp"
+        android:layout_height="40dp"
+        android:layout_marginLeft="10dp"
+        android:background="@null"
+        android:digits="0123456789abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+        android:gravity="center_vertical"
+        android:hint="@string/hnyy_input_your_account"
+        android:maxLength="20"
+        android:maxLines="1"
+        android:textColorHint="@color/hnyy_text_hint_color"
+        android:textSize="16dp"
+        android:textColor="@color/hnyy_text_black"/>
+    <Button
+        android:layout_toRightOf="@+id/et_input"
+        android:id="@+id/btn_right_view"
+        android:layout_width="13dp"
+        android:layout_height="13dp"
+        android:layout_marginLeft="5dp"
+        android:background="@mipmap/hnyy_close"
+        android:layout_centerVertical="true"
+        />
+
+</RelativeLayout>

+ 42 - 0
library_platform/src/main/res/layout/hnyy_email_dialog.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="460dp"
+    android:layout_height="300dp"
+    android:background="@drawable/hnyy_common_wv_bg"
+    android:orientation="vertical"
+    android:id="@+id/ll_webview_common"
+    >
+
+    <RelativeLayout
+        android:id="@+id/rl1"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        >
+
+
+        <WebView
+            android:id="@+id/wb_user_info"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:background="@drawable/hnyy_common_wv_bg"
+            />
+
+
+
+        <ImageView
+            android:id="@+id/close_btn"
+            android:layout_width="28dp"
+            android:layout_height="28dp"
+
+            android:src="@mipmap/hnyy_close"
+            android:layout_alignParentRight="true"
+            android:layout_marginRight="15dp"
+            android:layout_marginTop="15dp"
+            android:padding="6dp"
+            />
+    </RelativeLayout>
+
+
+
+</LinearLayout>

+ 72 - 0
library_platform/src/main/res/layout/hnyy_exit_game_dialog.xml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/ll_exit_game"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:background="@drawable/hnyy_exit_bg"
+
+    android:orientation="vertical" >
+
+    <LinearLayout
+        android:layout_width="320dp"
+        android:layout_height="150dp"
+        android:layout_gravity="center"
+
+        android:orientation="vertical" >
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="50dp"
+            android:gravity="center"
+            android:text="@string/hnyy_title_tip"
+            android:textColor="@color/hnyy_text_black"
+            android:textSize="18sp"
+            android:textStyle="bold"
+            />
+        <TextView
+            android:id="@+id/hnyy_issure_exit"
+            android:layout_width="190dp"
+            android:layout_height="45dp"
+            android:gravity="center_horizontal"
+            android:text="@string/hnyy_issure_exit"
+            android:textColor="@color/hnyy_edittext_bg_deep_gray"
+            android:textSize="17sp"
+            android:layout_gravity="center"/>
+
+
+        <RelativeLayout
+            android:layout_width="320dp"
+            android:layout_height="match_parent"
+            android:orientation="horizontal">
+
+
+            <Button
+                android:id="@+id/find_pwd_cancel_btn"
+                android:layout_width="130dp"
+                android:layout_height="40dp"
+                android:background="@drawable/hnyy_btn_exit_bg"
+                android:gravity="center"
+                android:text="@string/hnyy_cancel"
+                android:textColor="@color/hnyy_text_cyan_color"
+                android:textSize="15sp"
+                android:layout_marginLeft="15dp"
+                android:layout_centerVertical="true"/>
+
+
+            <Button
+                android:id="@+id/find_pwd_confirm_btn"
+                android:layout_width="130dp"
+                android:layout_height="40dp"
+                android:background="@drawable/hnyy_login_button_style"
+                android:gravity="center"
+                android:text="@string/hnyy_sure"
+                android:textColor="@color/hnyy_white"
+                android:textSize="15sp"
+                android:layout_alignParentRight="true"
+                android:layout_marginRight="15dp"
+                android:layout_centerVertical="true"/>
+        </RelativeLayout>
+    </LinearLayout>
+
+</LinearLayout>

+ 16 - 0
library_platform/src/main/res/layout/hnyy_hide_float_view.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical" android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:id="@+id/ll_hide"
+    android:background="@color/hnyy_text_black">
+    <TextView
+        android:layout_width="140dp"
+        android:layout_height="40dp"
+        android:drawableLeft="@mipmap/hnyy_hide_float_eye_view"
+        android:paddingLeft="5dp"
+        android:textColor="@color/hnyy_white"
+        android:text="@string/hnyy_close_float_view"
+        android:gravity="center"/>
+    
+</LinearLayout>

+ 45 - 0
library_platform/src/main/res/layout/hnyy_ios_style_dialog.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/hnyy_dialog_ios_bg">
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="20dp"
+        android:gravity="center_horizontal"
+        android:orientation="vertical">
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="@color/hnyy_black"
+            android:textSize="16sp"
+            android:textStyle="bold"
+            android:text="@string/hnyy_title_tip"/>
+
+        <TextView
+            android:id="@+id/content"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="4dp"
+            android:textColor="@color/hnyy_black"
+            android:textSize="12sp"
+            android:text="@string/hnyy_network_error_tip"/>
+    </LinearLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1px"
+        android:background="@color/hnyy_dialog_line"/>
+
+    <TextView
+        android:id="@+id/confirm"
+        android:layout_width="match_parent"
+        android:layout_height="40dp"
+        android:gravity="center"
+        android:layout_gravity="center_horizontal"
+        android:textColor="@color/hnyy_blues"
+        android:textSize="16sp"
+        android:text="@string/hnyy_confirm"/>
+    </LinearLayout>

+ 7 - 0
library_platform/src/main/res/layout/hnyy_login.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/hnyy_login_container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+</FrameLayout>

+ 12 - 0
library_platform/src/main/res/layout/hnyy_login_activity.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center">
+
+    <FrameLayout
+        android:id="@+id/hnyy_content"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+</RelativeLayout>

+ 62 - 0
library_platform/src/main/res/layout/hnyy_login_list.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="300dp"
+    android:layout_height="43dp"
+    android:background="@drawable/hnyy_login_button_style"
+    >
+    <ImageView
+        android:id="@+id/iv_account_icon"
+        android:layout_width="28dp"
+        android:layout_height="28dp"
+        android:background="@mipmap/hnyy_account_user"
+        android:layout_centerVertical="true"
+        android:layout_marginLeft="10dp"
+        />
+    <TextView
+        android:id="@+id/tv_account_type"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/hnyy_account_login_user"
+        android:textColor="@color/hnyy_white"
+        android:layout_toRightOf="@id/iv_account_icon"
+        android:layout_marginLeft="10dp"
+        android:layout_marginTop="5dp"
+        android:textSize="12dp"
+        />
+    <TextView
+        android:id="@+id/tv_account"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/iv_account_icon"
+        android:layout_below="@+id/tv_account_type"
+        android:textSize="12dp"
+        android:textColor="@color/hnyy_white"
+        android:layout_marginLeft="10dp"
+
+        />
+        <Button
+            android:id="@+id/btn_common_use"
+            android:layout_width="40dp"
+            android:layout_height="20dp"
+            android:background="@drawable/hnyy_login_list_btn_yellow_bg"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:text="@string/hnyy_common_use"
+            android:textColor="@color/hnyy_white"
+            android:textSize="11dp"
+
+            />
+    <Button
+        android:id="@+id/btn_delete"
+        android:layout_width="55dp"
+        android:layout_height="20dp"
+        android:background="@drawable/hnyy_login_list_delete_bg"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:text="@string/hnyy_delete_use"
+        android:textColor="@color/hnyy_light_blue"
+        android:textSize="11dp"
+        android:layout_marginRight="14dp"
+        android:visibility="gone"
+        />
+</RelativeLayout>

+ 39 - 0
library_platform/src/main/res/layout/hnyy_p_webview.xml

@@ -0,0 +1,39 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="360dp"
+    android:layout_height="320dp"
+    android:gravity="center"
+    android:background="@drawable/hnyy_radius_white_10dp"
+    android:orientation="vertical"
+    android:id="@+id/ll_p_wb"
+    >
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="20dp"
+            android:layout_weight="1.0"
+            android:orientation="horizontal">
+
+            <WebView
+                android:id="@+id/wb_with_xd"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:scrollbars="none"
+                android:layout_margin="10dp"
+                />
+
+            <ImageView
+                android:id="@+id/iv_reback_close"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:layout_marginRight="5dp"
+                android:padding="10dp"
+                android:src="@mipmap/hnyy_close"
+                android:layout_alignParentRight="true"
+
+                />
+
+        </RelativeLayout>
+
+
+    </LinearLayout>
+

+ 202 - 0
library_platform/src/main/res/layout/hnyy_phone_login.xml

@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="360dp"
+    android:layout_height="280dp"
+    android:background="@drawable/hnyy_login_bg"
+    android:orientation="vertical">
+
+    <RelativeLayout
+        android:id="@+id/rl1"
+        android:layout_width="match_parent"
+        android:layout_height="60dp"
+        >
+
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:layout_centerInParent= "true"
+            android:background="@mipmap/hnyy_logo"
+
+            />
+
+        <ImageButton
+            android:id="@+id/btn_kefu"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="30dp"
+            android:src="@mipmap/hnyy_kefu"
+            android:background="@color/hnyy_transparent"/>
+
+    </RelativeLayout>
+    <RelativeLayout
+        android:id="@+id/rl2"
+        android:layout_below="@id/rl1"
+        android:layout_width="300dp"
+        android:layout_height="wrap_content"
+        android:layout_centerInParent="true"
+        >
+        <EditText
+            android:id="@+id/et_user_phone"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:drawablePadding="20dp"
+            android:hint="@string/hnyy_input_phone_number"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:paddingLeft="20dp"
+            android:textSize="16sp"
+            android:maxLength="20"
+            android:digits="0123456789"
+            android:layout_centerHorizontal="true"
+            android:textColor="@color/hnyy_text_black"
+            />
+        <EditText
+            android:id="@+id/et_user_code"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_marginTop="12dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:drawablePadding="20dp"
+            android:hint="@string/hnyy_input_code"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:paddingLeft="20dp"
+            android:textSize="16sp"
+            android:maxLength="10"
+            android:digits="0123456789"
+            android:layout_below="@id/et_user_phone"
+            android:layout_alignLeft="@id/et_user_phone"
+            android:textColor="@color/hnyy_text_black"
+            />
+
+        <View
+            android:layout_width="1dp"
+            android:layout_height="20dp"
+            android:layout_marginTop="21dp"
+            android:background="@color/hnyy_edittext_bg_light_gray"
+            android:layout_toLeftOf="@id/btn_get_code"
+            android:layout_below="@id/et_user_phone"
+
+            />
+        <Button
+            android:id="@+id/btn_get_code"
+            android:layout_width="110dp"
+            android:layout_height="40dp"
+            android:layout_marginTop="10dp"
+            android:background="@null"
+            android:textColor="@color/hnyy_text_cyan_color"
+            android:textSize="16sp"
+            android:text="@string/hnyy_get_phone_code"
+            android:gravity="center"
+            android:layout_below="@id/et_user_phone"
+            android:layout_alignRight="@id/et_user_phone"
+            />
+
+
+        <Button
+            android:id="@+id/btn_reg_compete"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_centerHorizontal="true"
+            android:layout_gravity="center_horizontal"
+            android:background="@drawable/hnyy_login_button_style"
+            android:text="@string/hnyy_login"
+            android:textSize="16sp"
+            android:textColor="@color/hnyy_white"
+            android:minHeight="1dp"
+            android:minWidth="1dp"
+            android:gravity="center"
+            android:layout_below="@id/btn_get_code"
+            android:layout_marginTop="12dp"
+            />
+
+    </RelativeLayout>
+
+    <Button
+        android:id="@+id/btn_account_login"
+        android:layout_below="@id/rl2"
+        android:layout_width="wrap_content"
+        android:layout_height="32dp"
+        android:layout_alignLeft="@id/rl2"
+        android:drawableLeft="@mipmap/hnyy_account_login"
+        android:textSize="14sp"
+        android:text="@string/hnyy_account_login"
+        android:textColor="@color/hnyy_text_cyan_color"
+        android:background="@null"
+        android:layout_marginTop="10dp"
+        />
+    <Button
+        android:id="@+id/btn_guest_login"
+        android:layout_alignRight="@id/rl2"
+        android:layout_below="@id/rl2"
+        android:layout_width="wrap_content"
+        android:layout_height="32dp"
+        android:drawableLeft="@mipmap/hnyy_guest_login"
+        android:text="@string/hnyy_guest_register"
+        android:textSize="14sp"
+        android:textColor="@color/hnyy_text_cyan_color"
+        android:background="@null"
+        android:layout_marginTop="10dp"
+        />
+    <RelativeLayout
+        android:id="@+id/reg_tip_ll"
+        android:layout_width="wrap_content"
+        android:layout_height="35dp"
+        android:layout_below="@id/btn_guest_login"
+        android:gravity="center_vertical"
+        android:layout_centerInParent="true">
+
+        <CheckBox
+            android:id="@+id/cb_register"
+            style="@style/hnyy_checkbox_style"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:checked="true"
+            android:layout_marginLeft="18dp"
+            android:layout_centerVertical="true" />
+
+        <TextView
+            android:id="@+id/tv_agree_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="5dp"
+            android:layout_toRightOf="@id/cb_register"
+            android:gravity="center"
+            android:text="@string/hnyy_agreement_tip"
+            android:textColor="@color/hnyy_text_black"
+            android:textSize="11sp" />
+
+        <TextView
+            android:id="@+id/tv_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_toRightOf="@id/tv_agree_tip"
+            android:gravity="center"
+            android:text="@string/hnyy_agree_register_tip"
+            android:textColor="@color/hnyy_font_red_color"
+            android:textSize="11sp" />
+
+        <TextView
+            android:id="@+id/tv_and_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_toRightOf="@id/tv_tip"
+            android:gravity="center"
+            android:text="@string/hnyy_and"
+            android:textColor="@color/hnyy_text_black"
+            android:textSize="11sp" />
+
+        <TextView
+            android:id="@+id/tv_private_policy"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_toRightOf="@id/tv_and_tip"
+            android:gravity="center|left"
+            android:text="@string/hnyy_private_policy"
+            android:textColor="@color/hnyy_font_red_color"
+            android:textSize="11sp" />
+    </RelativeLayout>
+
+</RelativeLayout>

+ 145 - 0
library_platform/src/main/res/layout/hnyy_phone_register_setpwd_dialog.xml

@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="360dp"
+    android:layout_height="280dp"
+    android:background="@drawable/hnyy_login_bg"
+    >
+
+    <RelativeLayout
+        android:id="@+id/rl1"
+        android:layout_width="match_parent"
+        android:layout_height="60dp">
+
+        <ImageButton
+            android:id="@+id/close_btn"
+            android:layout_width="26dp"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="30dp"
+            android:src="@mipmap/hnyy_reback"
+            android:background="@color/hnyy_transparent"/>
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/hnyy_set_pwd"
+            android:textSize="19sp"
+            android:layout_centerInParent="true"
+            android:textColor="@color/hnyy_edittext_bg_deep_gray"
+            />
+
+        <ImageButton
+            android:id="@+id/btn_kefu"
+            android:layout_width="26dp"
+            android:layout_height="match_parent"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="30dp"
+            android:src="@mipmap/hnyy_kefu"
+            android:background="@color/hnyy_transparent" />
+
+    </RelativeLayout>
+
+
+
+
+
+
+        <EditText
+
+            android:id="@+id/reg_pwd_edit"
+            android:layout_width="300dp"
+            android:layout_height="40dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:hint="@string/hnyy_set_pwd"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:digits="0123456789abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+            android:maxLength="20"
+            android:maxLines="1"
+            android:textSize="14dp"
+            android:gravity="center_vertical"
+            android:textColor="@color/hnyy_text_black"
+            android:layout_below="@+id/rl1"
+            android:layout_centerInParent="true"
+            android:layout_marginTop="30dp"
+            android:drawableLeft="@mipmap/hnyy_lock"
+            android:drawablePadding="5dp"
+            android:paddingLeft="10dp"
+
+            />
+
+
+
+    <RelativeLayout
+        android:id="@+id/reg_tip_ll"
+        android:layout_width="300dp"
+        android:layout_height="35dp"
+        android:layout_marginTop="30dp"
+        android:layout_below="@+id/reg_compete_btn"
+        android:gravity="center"
+        android:layout_centerInParent="true"
+        >
+        <CheckBox
+            android:id="@+id/cb_register"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="20dp"
+            android:checked="true"
+            android:gravity="left|center"
+            style="@style/hnyy_checkbox_style"
+             />
+        <TextView
+            android:id="@+id/tv_agree_tip"
+            android:layout_toRightOf="@id/cb_register"
+            android:layout_marginLeft="10dp"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_agreement_tip"
+            android:textColor="@color/hnyy_text_black"/>
+        <TextView
+            android:id="@+id/tv_tip"
+           android:layout_toRightOf="@id/tv_agree_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_agree_register_tip"
+            android:textColor="@color/hnyy_font_red_color"/>
+        <TextView
+            android:id="@+id/tv_and_tip"
+            android:layout_toRightOf="@id/tv_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_and"
+            android:textColor="@color/hnyy_text_black"/>
+        <TextView
+            android:id="@+id/tv_private_policy"
+            android:layout_toRightOf="@id/tv_and_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center|left"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_private_policy"
+            android:textColor="@color/hnyy_font_red_color"/>
+    </RelativeLayout>
+
+
+    <Button
+        android:id="@+id/reg_compete_btn"
+        android:layout_width="300dp"
+        android:layout_height="40dp"
+        android:layout_below="@id/reg_pwd_edit"
+        android:layout_gravity="center_horizontal"
+        android:background="@drawable/hnyy_login_button_style"
+        android:layout_centerHorizontal="true"
+        android:text="@string/hnyy_register"
+        android:textColor="@color/hnyy_white"
+        android:textSize="16sp"
+        android:layout_marginTop="20dp"/>
+
+
+</RelativeLayout>

+ 81 - 0
library_platform/src/main/res/layout/hnyy_privacy_policy_dialog.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="360dp"
+    android:layout_height="280dp"
+    android:background="@drawable/hnyy_color_white_70"
+    android:orientation="vertical"
+    android:id="@+id/ll_private_policy"
+    >
+
+
+<RelativeLayout
+    android:layout_width="match_parent"
+    android:layout_height="0dp"
+    android:layout_weight="7"
+    android:layout_marginTop="10dp"
+    android:layout_marginLeft="2dp"
+    android:layout_marginRight="2dp"
+    >
+        <WebView
+            android:id="@+id/wb_user_info"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:background="@color/hnyy_transparent"
+            />
+
+    <ImageView
+            android:layout_width="30dp"
+            android:layout_height="30dp"
+            android:layout_centerInParent="true"
+            android:id="@+id/hnyy_loading"
+            android:background="@mipmap/hnyy_loading"/>
+</RelativeLayout>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="3"
+        android:orientation="horizontal"
+        >
+        <View
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            />
+        <Button
+
+            android:id="@+id/btn_disagree"
+            android:layout_width="0dp"
+            android:layout_height="30dp"
+            android:layout_weight="2"
+            android:layout_gravity="center"
+            android:text="@string/hnyy_disagreement"
+            android:textColor="@color/hnyy_text_cyan_color"
+            android:background="@drawable/hnyy_btn_exit_bg"/>
+        <View
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            />
+        <View
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            />
+
+        <Button
+            android:id="@+id/btn_agree"
+            android:layout_width="0dp"
+            android:layout_height="30dp"
+            android:layout_weight="2"
+            android:layout_gravity="center"
+            android:background="@drawable/hnyy_login_button_style"
+            android:textColor="@color/hnyy_white"
+            android:text="@string/hnyy_agreement"/>
+        <View
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            />
+    </LinearLayout>
+</LinearLayout>

+ 25 - 0
library_platform/src/main/res/layout/hnyy_quick_login_bar.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal" android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@drawable/hnyy_edittext_bg"
+    android:padding="14dp"
+    >
+
+    <TextView
+        android:id="@+id/hnyy_auto_login_account_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="yx12589647896257,"
+        android:textColor="@color/hnyy_text_black"
+        android:textSize="14sp" />
+
+    <TextView
+        android:id="@+id/hnyy_auto_login_cancel_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/hnyy_switch_account"
+        android:textColor="@color/hnyy_text_cyan_color"
+        android:textSize="14sp"
+        />
+</LinearLayout>

+ 211 - 0
library_platform/src/main/res/layout/hnyy_register_dialog.xml

@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="360dp"
+    android:layout_height="280dp"
+    android:background="@drawable/hnyy_login_bg"
+    >
+
+    <RelativeLayout
+        android:id="@+id/rl1"
+        android:layout_width="match_parent"
+        android:layout_height="60dp">
+
+        <ImageButton
+            android:id="@+id/close_btn"
+            android:layout_width="26dp"
+            android:layout_height="match_parent"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="30dp"
+            android:src="@mipmap/hnyy_reback"
+            android:background="@color/hnyy_transparent"/>
+
+
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/hnyy_guest_register"
+            android:textSize="19sp"
+            android:layout_centerInParent="true"
+
+            android:textColor="@color/hnyy_edittext_bg_deep_gray"
+            />
+
+        <ImageButton
+            android:id="@+id/btn_kefu"
+            android:layout_width="26dp"
+            android:layout_height="match_parent"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="30dp"
+            android:src="@mipmap/hnyy_kefu"
+            android:background="@color/hnyy_transparent" />
+
+    </RelativeLayout>
+
+    <RelativeLayout
+        android:id="@+id/ll1"
+        android:layout_below="@+id/rl1"
+        android:layout_width="300dp"
+        android:layout_height="wrap_content"
+
+        android:layout_centerInParent="true" >
+
+
+        <EditText
+            android:id="@+id/reg_account_edit"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:digits="0123456789abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+            android:gravity="center_vertical"
+            android:hint="@string/hnyy_input_your_account"
+            android:maxLength="20"
+            android:maxLines="1"
+            android:paddingLeft="20dp"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:textSize="14dp"
+            android:textColor="@color/hnyy_text_black"/>
+
+        <ImageView
+            android:id="@+id/iv_clear_text"
+            android:layout_alignRight="@id/reg_account_edit"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:src="@mipmap/hnyy_close"
+            android:padding="13dp"
+            android:layout_marginRight="3dp"
+            />
+
+        <EditText
+            android:layout_below="@id/reg_account_edit"
+            android:id="@+id/reg_pwd_edit"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:paddingLeft="20dp"
+            android:hint="@string/hnyy_input_your_pwd"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:digits="0123456789abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+            android:maxLength="20"
+            android:maxLines="1"
+            android:textSize="14dp"
+            android:layout_marginTop="10dp"
+            android:gravity="center_vertical"
+            android:textColor="@color/hnyy_text_black"
+            />
+
+        <ImageView
+            android:id="@+id/iv_show_pwd"
+            android:layout_below="@id/reg_account_edit"
+            android:layout_marginTop="10dp"
+            android:layout_alignRight="@+id/reg_pwd_edit"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:src="@mipmap/hnyy_open_eye"
+            android:padding="10dp"
+            android:layout_marginRight="5dp"
+            />
+
+    </RelativeLayout>
+    <RelativeLayout
+        android:id="@+id/reg_tip_ll"
+        android:layout_width="300dp"
+        android:layout_height="35dp"
+        android:layout_alignRight="@id/ll1"
+        android:layout_below="@+id/btn_account_login"
+        android:gravity="center_vertical"
+        >
+        <CheckBox
+            android:id="@+id/cb_register"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="20dp"
+            android:checked="true"
+            android:gravity="left|center"
+            style="@style/hnyy_checkbox_style"
+             />
+        <TextView
+            android:id="@+id/tv_agree_tip"
+            android:layout_toRightOf="@id/cb_register"
+            android:layout_marginLeft="10dp"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_agreement_tip"
+            android:textColor="@color/hnyy_text_black"/>
+        <TextView
+            android:id="@+id/tv_tip"
+           android:layout_toRightOf="@id/tv_agree_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_agree_register_tip"
+            android:textColor="@color/hnyy_font_red_color"/>
+        <TextView
+            android:id="@+id/tv_and_tip"
+            android:layout_toRightOf="@id/tv_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_and"
+            android:textColor="@color/hnyy_text_black"/>
+        <TextView
+            android:id="@+id/tv_private_policy"
+            android:layout_toRightOf="@id/tv_and_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center|left"
+            android:textSize="11.2sp"
+            android:text="@string/hnyy_private_policy"
+            android:textColor="@color/hnyy_font_red_color"/>
+    </RelativeLayout>
+
+
+    <Button
+        android:id="@+id/reg_compete_btn"
+        android:layout_width="300dp"
+        android:layout_height="40dp"
+        android:layout_below="@id/ll1"
+        android:layout_gravity="center_horizontal"
+        android:background="@drawable/hnyy_login_button_style"
+        android:layout_centerHorizontal="true"
+        android:text="@string/hnyy_register"
+        android:textColor="@color/hnyy_white"
+        android:textSize="16sp"
+        android:layout_marginTop="10dp"/>
+
+    <Button
+        android:id="@+id/btn_account_login"
+        android:layout_below="@id/reg_compete_btn"
+        android:layout_width="wrap_content"
+        android:layout_height="40dp"
+        android:layout_alignLeft="@id/reg_tip_ll"
+        android:drawableLeft="@mipmap/hnyy_phone"
+        android:textSize="14sp"
+        android:text="@string/hnyy_phone_register"
+        android:textColor="@color/hnyy_text_cyan_color"
+        android:background="@null"
+        />
+    <Button
+        android:id="@+id/btn_guest_login"
+        android:layout_below="@id/reg_compete_btn"
+        android:layout_alignRight="@id/reg_tip_ll"
+        android:layout_width="wrap_content"
+        android:layout_height="40dp"
+        android:drawableLeft="@mipmap/hnyy_account_login"
+        android:text="@string/hnyy_has_account"
+        android:textSize="14sp"
+        android:textColor="@color/hnyy_text_cyan_color"
+        android:background="@null"
+        />
+
+
+
+
+
+
+</RelativeLayout>

+ 178 - 0
library_platform/src/main/res/layout/hnyy_retrieve_pwd.xml

@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="360dp"
+    android:layout_height="280dp"
+    android:background="@drawable/hnyy_login_bg"
+    android:orientation="vertical">
+
+    <RelativeLayout
+        android:id="@+id/rl1"
+        android:layout_width="match_parent"
+        android:layout_height="52dp"
+        >
+
+        <ImageButton
+            android:id="@+id/close_btn"
+            android:layout_width="26dp"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="30dp"
+            android:layout_centerVertical="true"
+            android:src="@mipmap/hnyy_reback"
+            android:background="@color/hnyy_transparent"
+            />
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/hnyy_forget_pwd"
+            android:textSize="19sp"
+            android:layout_centerInParent="true"
+            android:textColor="@color/hnyy_edittext_bg_deep_gray"
+            />
+
+        <ImageButton
+            android:id="@+id/btn_kefu"
+            android:layout_width="26dp"
+            android:layout_height="match_parent"
+            android:layout_marginRight="30dp"
+            android:layout_centerVertical="true"
+            android:layout_alignParentRight="true"
+            android:src="@mipmap/hnyy_kefu"
+            android:background="@color/hnyy_transparent"
+            />
+
+    </RelativeLayout>
+    <RelativeLayout
+        android:layout_width="300dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal">
+        <EditText
+            android:id="@+id/et_user_phone"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:background="@drawable/hnyy_edittext_bg"
+            android:hint="@string/hnyy_input_phone_number"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:paddingLeft="10dp"
+            android:textSize="16sp"
+            android:maxLength="20"
+            android:digits="0123456789"
+            android:layout_centerHorizontal="true"
+            android:textColor="@color/hnyy_text_black"
+            />
+        <EditText
+            android:id="@+id/et_user_code"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_marginTop="11dp"
+            android:background="@drawable/hnyy_edittext_bg"
+
+            android:hint="@string/hnyy_input_code"
+            android:textColorHint="@color/hnyy_text_hint_color"
+            android:paddingLeft="10dp"
+            android:textSize="16sp"
+            android:maxLength="10"
+            android:digits="0123456789"
+            android:layout_below="@id/et_user_phone"
+            android:layout_alignLeft="@id/et_user_phone"
+            android:textColor="@color/hnyy_text_black"
+
+            />
+
+        <View
+            android:layout_width="1dp"
+            android:layout_height="20dp"
+            android:layout_marginTop="21dp"
+            android:background="@color/hnyy_text_hint_color"
+            android:layout_toLeftOf="@id/btn_get_code"
+            android:layout_below="@id/et_user_phone"
+
+            />
+        <Button
+            android:id="@+id/btn_get_code"
+            android:layout_width="110dp"
+            android:layout_height="40dp"
+            android:layout_marginTop="10dp"
+            android:background="@null"
+            android:textColor="@color/hnyy_text_cyan_color"
+            android:textSize="16sp"
+
+            android:text="@string/hnyy_get_phone_code"
+            android:gravity="center"
+            android:layout_below="@id/et_user_phone"
+            android:layout_alignRight="@id/et_user_phone"
+            />
+
+        <EditText
+            android:id="@+id/et_user_pwd"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:background="@drawable/hnyy_edittext_bg"
+
+            android:textColorHint="@color/hnyy_text_hint_color"
+
+            android:hint="@string/hnyy_input_new_pwd"
+            android:paddingLeft="12dp"
+            android:textSize="16sp"
+            android:maxLength="20"
+            android:digits="0123456789abcdefghijgklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="11dp"
+            android:layout_below="@id/et_user_code"
+            android:layout_alignLeft="@id/et_user_code"
+            android:inputType="textPassword"
+            android:textColor="@color/hnyy_text_black"
+            />
+
+        <Button
+            android:id="@+id/reg_compete_btn"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_centerHorizontal="true"
+            android:layout_gravity="center_horizontal"
+            android:background="@drawable/hnyy_login_button_style"
+            android:text="@string/hnyy_find_pwd_phone"
+            android:textSize="16sp"
+            android:textColor="@color/hnyy_white"
+            android:minHeight="1dp"
+            android:minWidth="1dp"
+            android:gravity="center"
+            android:layout_below="@id/et_user_pwd"
+            android:layout_marginTop="11dp"
+            />
+        <TextView
+            android:id="@+id/tv_tip_1"
+            android:layout_marginTop="8dp"
+            android:layout_below="@id/reg_compete_btn"
+            android:layout_width="wrap_content"
+            android:layout_height="20dp"
+            android:gravity="center"
+            android:layout_marginLeft="40dp"
+            android:text="@string/hnyy_forget_pwd_tip"
+            android:textColor="@color/hnyy_text_black"
+
+            />
+        <TextView
+            android:id="@+id/tv_tip_2"
+            android:layout_marginTop="8dp"
+            android:layout_below="@id/reg_compete_btn"
+            android:layout_width="wrap_content"
+            android:layout_height="20dp"
+            android:gravity="center"
+            android:text="@string/hnyy_contact_tip"
+            android:textColor="@color/hnyy_font_red_color"
+            android:layout_toRightOf="@id/tv_tip_1"
+            android:clickable="true"
+            />
+        <TextView
+            android:layout_marginTop="8dp"
+            android:layout_below="@id/reg_compete_btn"
+            android:layout_width="wrap_content"
+            android:layout_height="20dp"
+            android:gravity="center"
+            android:text="@string/hnyy_get_back_tip"
+            android:layout_toRightOf="@id/tv_tip_2"
+            android:textColor="@color/hnyy_text_black"
+
+            />
+    </RelativeLayout>
+</LinearLayout>

+ 15 - 0
library_platform/src/main/res/layout/hnyy_show_splash_view.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:background="@color/hnyy_white">
+    
+    <ImageView 
+        android:id="@+id/iv_show_bg"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:scaleType="fitCenter"
+        />
+
+</LinearLayout>

Some files were not shown because too many files changed in this diff