Selaa lähdekoodia

v1.0.1开发:
1)agp版本升级到7.0.4
2)浮标容器改为Dialog

#Suyghur 3 vuotta sitten
vanhempi
commit
420bab58f6
43 muutettua tiedostoa jossa 640 lisäystä ja 1000 poistoa
  1. 2 11
      build.gradle
  2. 5 5
      config.gradle
  3. 3 13
      demo/build.gradle
  4. 1 0
      demo/src/main/AndroidManifest.xml
  5. 17 2
      demo/src/main/java/com/eyuangame/demo/DemoActivity.kt
  6. BIN
      demo/src/main/res/drawable-xhdpi/cpp.gif
  7. 5 5
      gradle.properties
  8. 2 2
      gradle/wrapper/gradle-wrapper.properties
  9. 4 14
      library_base/build.gradle
  10. 2 2
      library_base/src/main/java/cn/yyxx/eyuangame/base/EYuanGame.kt
  11. 8 18
      library_core/build.gradle
  12. 1 1
      library_core/publish.gradle
  13. 0 16
      library_core/src/main/AndroidManifest.xml
  14. 2 2
      library_core/src/main/java/cn/yyxx/eyuangame/core/SdkBridge.kt
  15. 1 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/entity/SdkBackLoginInfo.kt
  16. 31 6
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/SdkBridgeImpl.kt
  17. 104 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/BindAccountContainer.kt
  18. 66 83
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/BindPhoneContainer.kt
  19. 59 104
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/HybridFeatureContainer.kt
  20. 0 202
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberActivity.kt
  21. 143 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberCenterContainer.kt
  22. 0 14
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/MemberFragmentTag.kt
  23. 48 50
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/ModifyPwdContainer.kt
  24. 0 142
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/BindAccountFragment.kt
  25. 0 131
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/MainFragment.kt
  26. 6 8
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/floatball/FloatCenterService.kt
  27. 1 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/login/LoginFragmentPagerAdapter.kt
  28. 7 7
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/share/ShareImpl.kt
  29. 2 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/internal/IEventObserver.kt
  30. 3 2
      library_core/src/main/java/cn/yyxx/eyuangame/core/linking/Linking.kt
  31. 6 5
      library_core/src/main/java/cn/yyxx/eyuangame/core/linking/channel/LinkingAdjustImpl.kt
  32. 10 4
      library_core/src/main/java/cn/yyxx/eyuangame/core/linking/channel/LinkingFacebookImpl.kt
  33. 6 3
      library_core/src/main/java/cn/yyxx/eyuangame/core/linking/channel/LinkingFirebaseImpl.kt
  34. 14 21
      library_core/src/main/res/layout-land/yyxx_hybrid.xml
  35. 1 1
      library_core/src/main/res/layout/yyxx_auto_login_dialog.xml
  36. 22 20
      library_core/src/main/res/layout/yyxx_hybrid.xml
  37. 17 32
      library_core/src/main/res/layout/yyxx_member_bind_account.xml
  38. 5 4
      library_core/src/main/res/layout/yyxx_member_bind_phone.xml
  39. 9 15
      library_core/src/main/res/layout/yyxx_member_center.xml
  40. 12 26
      library_core/src/main/res/layout/yyxx_member_modify_pwd.xml
  41. 3 13
      library_hk_language/build.gradle
  42. 3 13
      library_vn_language/build.gradle
  43. 9 0
      settings.gradle

+ 2 - 11
build.gradle

@@ -2,7 +2,7 @@
 apply from: 'config.gradle'
 buildscript {
     ext {
-        kotlin_version = '1.5.30'
+        kotlin_version = '1.6.0'
     }
 
 
@@ -12,7 +12,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:4.1.3'
+        classpath 'com.android.tools.build:gradle:7.0.4'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
@@ -20,15 +20,6 @@ buildscript {
     }
 }
 
-allprojects {
-    repositories {
-        google()
-        mavenCentral()
-        jcenter()
-//        maven { url 'https://jitpack.io' }
-    }
-}
-
 task clean(type: Delete) {
     delete rootProject.buildDir
 }

+ 5 - 5
config.gradle

@@ -3,14 +3,14 @@ ext {
     module = [
             remoteLib    : false,
             minifyEnabled: true,
-            publish      : true,
+            publish      : false,
             language     : 2
     ]
 
     android = [
-            compileSdkVersion: 31,
-            buildToolsVersion: '30.0.3',
-            minSdkVersion    : 21,
-            targetSdkVersion : 31,
+            compileSdk: 31,
+            buildToolsVersion: '31.0.0',
+            minSdk    : 21,
+            targetSdk : 31,
     ]
 }

+ 3 - 13
demo/build.gradle

@@ -8,13 +8,13 @@ def keystoreProperties = new Properties()
 keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
 
 android {
-    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    compileSdk rootProject.ext.android.compileSdk
     buildToolsVersion rootProject.ext.android.buildToolsVersion
 
     defaultConfig {
         applicationId 'com.shzd.eyuangame'
-        minSdkVersion rootProject.ext.android.minSdkVersion
-        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        minSdk rootProject.ext.android.minSdk
+        targetSdk rootProject.ext.android.targetSdk
         versionCode 1
         versionName "0.0.1"
 
@@ -51,16 +51,6 @@ android {
         abortOnError false
     }
 
-    repositories {
-        flatDir {
-            dirs 'libs'
-        }
-    }
-
-    dexOptions {
-        preDexLibraries = false
-    }
-
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8

+ 1 - 0
demo/src/main/AndroidManifest.xml

@@ -17,6 +17,7 @@
             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
             android:launchMode="standard"
             android:screenOrientation="portrait"
+            android:exported="true"
             android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />

+ 17 - 2
demo/src/main/java/com/eyuangame/demo/DemoActivity.kt

@@ -6,6 +6,7 @@ import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
 import android.os.Message
+import android.view.Gravity
 import android.view.KeyEvent
 import android.view.View
 import android.widget.*
@@ -14,8 +15,11 @@ import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 import cn.yyxx.eyuangame.base.entity.SdkRoleInfo
 import cn.yyxx.eyuangame.base.internal.ICallback
+import cn.yyxx.support.DensityUtils
+import cn.yyxx.support.ResUtils
 import cn.yyxx.support.hawkeye.LogUtils
 import cn.yyxx.support.hawkeye.ToastUtils
+import cn.yyxx.support.ui.GifView
 import kotlin.system.exitProcess
 
 
@@ -43,6 +47,7 @@ class DemoActivity : Activity(), View.OnClickListener {
 
     private lateinit var layout: LinearLayout
     private lateinit var mTextView: TextView
+    private lateinit var gifView: GifView
 
     private var cacheRoleInfo: CacheRoleInfo.RoleInfo? = null
 
@@ -72,6 +77,14 @@ class DemoActivity : Activity(), View.OnClickListener {
     private fun initView() {
         layout = LinearLayout(this)
         layout.orientation = LinearLayout.VERTICAL
+
+        val gifLayoutParams = LinearLayout.LayoutParams(DensityUtils.dip2px(this, 100f), DensityUtils.dip2px(this, 100f))
+        gifLayoutParams.gravity = Gravity.CENTER
+        gifView = GifView(this)
+        gifView.setGifResource(ResUtils.getResId(this, "cpp", "drawable"))
+        gifView.layoutParams = gifLayoutParams
+        layout.addView(gifView)
+
         initButton()
         mTextView = TextView(this)
         with(mTextView) {
@@ -253,11 +266,13 @@ class DemoActivity : Activity(), View.OnClickListener {
 
     override fun onResume() {
         super.onResume()
+        gifView.setPaused(false)
         EYuanGame.getInstance().onResume(this)
     }
 
     override fun onRestart() {
         super.onRestart()
+        gifView.setPaused(true)
         EYuanGame.getInstance().onRestart(this)
     }
 
@@ -277,12 +292,12 @@ class DemoActivity : Activity(), View.OnClickListener {
         exitProcess(0)
     }
 
-    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         super.onActivityResult(requestCode, resultCode, data)
         EYuanGame.getInstance().onActivityResult(this, requestCode, resultCode, data)
     }
 
-    override fun onNewIntent(intent: Intent) {
+    override fun onNewIntent(intent: Intent?) {
         super.onNewIntent(intent)
         EYuanGame.getInstance().onNewIntent(this, intent)
     }

BIN
demo/src/main/res/drawable-xhdpi/cpp.gif


+ 5 - 5
gradle.properties

@@ -6,16 +6,16 @@
 # http://www.gradle.org/docs/current/userguide/build_environment.html
 # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m -Xms2048m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 # org.gradle.parallel=true
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app"s APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
 android.injected.testOnly=false
 android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 # Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style="official"
+kotlin.code.style=official
+org.gradle.parallel=true
+org.gradle.configureondemand=true

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Thu Jul 29 17:27:52 CST 2021
+#Thu Dec 23 09:49:40 CST 2021
 distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
 distributionPath=wrapper/dists
 zipStorePath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME

+ 4 - 14
library_base/build.gradle

@@ -4,12 +4,12 @@ plugins {
 }
 
 android {
-    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    compileSdk rootProject.ext.android.compileSdk
     buildToolsVersion rootProject.ext.android.buildToolsVersion
 
     defaultConfig {
-        minSdkVersion rootProject.ext.android.minSdkVersion
-        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        minSdk rootProject.ext.android.minSdk
+        targetSdk rootProject.ext.android.targetSdk
 
         ndk {
             // 设置支持的SO库架构
@@ -26,23 +26,13 @@ android {
     }
 
     buildFeatures {
-        buildConfig = false
+        buildConfig  false
     }
 
     lintOptions {
         abortOnError false
     }
 
-    repositories {
-        flatDir {
-            dirs '../libs'
-        }
-    }
-
-    dexOptions {
-        preDexLibraries = false
-    }
-
     compileOptions {
         kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyaungame.base"]
     }

+ 2 - 2
library_base/src/main/java/cn/yyxx/eyuangame/base/EYuanGame.kt

@@ -350,7 +350,7 @@ class EYuanGame private constructor() {
         SdkBridgeManager.call(Function.ON_DESTROY, arrayOf(Activity::class.java), arrayOf(activity))
     }
 
-    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, intent: Intent) {
+    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, intent: Intent?) {
         if (checkSdkBridgeNull(Function.ON_ACTIVITY_RESULT, null)) {
             return
         }
@@ -362,7 +362,7 @@ class EYuanGame private constructor() {
         )
     }
 
-    fun onNewIntent(activity: Activity, intent: Intent) {
+    fun onNewIntent(activity: Activity, intent: Intent?) {
         if (checkSdkBridgeNull(Function.ON_NEW_INTENT, null)) {
             return
         }

+ 8 - 18
library_core/build.gradle

@@ -4,12 +4,12 @@ plugins {
 }
 
 android {
-    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    compileSdk rootProject.ext.android.compileSdk
     buildToolsVersion rootProject.ext.android.buildToolsVersion
 
     defaultConfig {
-        minSdkVersion rootProject.ext.android.minSdkVersion
-        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        minSdk rootProject.ext.android.minSdk
+        targetSdk rootProject.ext.android.targetSdk
 
         externalNativeBuild {
             cmake {
@@ -33,23 +33,13 @@ android {
     }
 
     buildFeatures {
-        buildConfig = false
+        buildConfig false
     }
 
     lintOptions {
         abortOnError false
     }
 
-    repositories {
-        flatDir {
-            dirs '../libs'
-        }
-    }
-
-    dexOptions {
-        preDexLibraries = false
-    }
-
     compileOptions {
         kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyuangame.core"]
     }
@@ -86,12 +76,12 @@ dependencies {
 
     //google
     implementation 'com.google.android.play:core:1.10.2'
-    implementation 'com.google.android.gms:play-services-auth:19.2.0'
+    implementation 'com.google.android.gms:play-services-auth:20.0.0'
     //4.0.0的billing库消耗商品会回调两次,后续在排查,先用3.0.3
     implementation "com.android.billingclient:billing-ktx:3.0.3"
-    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'
-    implementation 'com.google.firebase:firebase-crashlytics-ktx:18.2.4'
-    implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.4'
+    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.2'
+    implementation 'com.google.firebase:firebase-crashlytics-ktx:18.2.6'
+    implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.6'
 
     //facebook
     implementation 'com.facebook.android:facebook-android-sdk:11.2.0'

+ 1 - 1
library_core/publish.gradle

@@ -4,7 +4,7 @@ apply plugin: 'signing'
 ext {
     PUBLISH_GROUP_ID = 'io.github.yyxxgame.sdk'
     PUBLISH_ARTIFACT_ID = 'eyuangame-sdk-ktx'
-    PUBLISH_VERSION = '1.0.1-rc2'
+    PUBLISH_VERSION = '1.0.1-rc4'
 }
 
 Properties properties = new Properties()

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

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

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

@@ -90,11 +90,11 @@ class SdkBridge constructor() {
         mImpl?.onDestroy(activity)
     }
 
-    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, intent: Intent) {
+    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, intent: Intent?) {
         mImpl?.onActivityResult(activity, requestCode, resultCode, intent)
     }
 
-    fun onNewIntent(activity: Activity, intent: Intent) {
+    fun onNewIntent(activity: Activity, intent: Intent?) {
         mImpl?.onNewIntent(activity, intent)
     }
 

+ 1 - 1
library_core/src/main/java/cn/yyxx/eyuangame/core/entity/SdkBackLoginInfo.kt

@@ -47,7 +47,7 @@ class SdkBackLoginInfo private constructor() {
     }
 
     override fun toString(): String {
-        return "SdkBackLoginInfo(userId='$userId', token='$token', isRegUser=$isRegUser, phoneNum=$phoneNum, hasBindAccount=$hasBindAccount, loginType=$loginType)"
+        return "SdkBackLoginInfo(userId='$userId', token='$token', isRegUser=$isRegUser, phoneNum='$phoneNum', hasBindAccount=$hasBindAccount, loginType=$loginType, currentRoleId='$currentRoleId', currentRoleName='$currentRoleName', currentRoleLevel='$currentRoleLevel', currentServerId='$currentServerId', currentServerName='$currentServerName')"
     }
 
 

+ 31 - 6
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/SdkBridgeImpl.kt

@@ -1,6 +1,7 @@
 package cn.yyxx.eyuangame.core.impl
 
 import android.app.Activity
+import android.app.Activity.RESULT_OK
 import android.app.Application
 import android.content.Context
 import android.content.Intent
@@ -17,7 +18,7 @@ import cn.yyxx.eyuangame.base.utils.ParamsUtils
 import cn.yyxx.eyuangame.core.entity.ResultInfo
 import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
 import cn.yyxx.eyuangame.core.entity.bean.init.InitBean
-import cn.yyxx.eyuangame.core.impl.center.HybridActivity
+import cn.yyxx.eyuangame.core.impl.center.HybridFeatureContainer
 import cn.yyxx.eyuangame.core.impl.floatball.FloatCenterServiceManager
 import cn.yyxx.eyuangame.core.impl.iab.ChargeImpl
 import cn.yyxx.eyuangame.core.impl.login.LoginActivity
@@ -67,6 +68,8 @@ class SdkBridgeImpl {
 
     private var initLoadingDialog: ScaleLoadingDialog? = null
 
+//    private var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
+
 
     fun attachBaseContext(application: Application, context: Context) {
         Logger.initZap(application)
@@ -319,12 +322,12 @@ class SdkBridgeImpl {
                 override fun onResult(code: Int, result: String) {
                     when (code) {
                         0 -> {
-                            Linking.instance.charge(activity, innerChargeInfo.amount)
+                            Linking.instance.charge(activity, innerChargeInfo)
                             callback.onResult(0, result)
                         }
                         1 -> {
                             //H5支付
-                            HybridActivity.start(activity, initBean.floatCfg.chargeCfg.url)
+                            HybridFeatureContainer(activity, initBean.floatCfg.chargeCfg.url).show()
                         }
                         else -> {
                             callback.onResult(-1, result)
@@ -334,7 +337,7 @@ class SdkBridgeImpl {
             })
         } else {
             //H5支付
-            HybridActivity.start(activity, initBean.floatCfg.chargeCfg.url)
+            HybridFeatureContainer(activity, initBean.floatCfg.chargeCfg.url).show()
         }
     }
 
@@ -363,6 +366,7 @@ class SdkBridgeImpl {
         SdkBackLoginInfo.instance.currentRoleLevel = roleInfo.roleLevel
         SdkBackLoginInfo.instance.currentServerId = roleInfo.serverId
         SdkBackLoginInfo.instance.currentServerName = roleInfo.serverName
+        Logger.d(SdkBackLoginInfo.instance.toString())
 //        SdkRequest.instance.submitRoleData(activity, timing, roleInfo, object : IRequestCallback {
 //            override fun onResponse(resultInfo: ResultInfo) {
 //                Logger.d("submitRoleData code : ${resultInfo.code} , msg : ${resultInfo.msg}")
@@ -432,11 +436,32 @@ class SdkBridgeImpl {
         MMKVUtils.instance.release()
     }
 
-    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, intent: Intent) {
+    fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
         Logger.i("EYuanGameSdk onActivityResult ...")
+
+        if (requestCode == HybridFeatureContainer.FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5) {
+            Logger.d("onActivityResult FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5")
+            if (HybridFeatureContainer.uploadMessageForAndroid5 == null) {
+                Logger.d("mUploadMessageForAndroid5 == null")
+                return
+            }
+            if (data == null) {
+                HybridFeatureContainer.uploadMessageForAndroid5!!.onReceiveValue(arrayOf())
+                return
+            }
+            val result = if (resultCode != RESULT_OK) null else data.data
+            if (result == null) {
+                HybridFeatureContainer.uploadMessageForAndroid5!!.onReceiveValue(arrayOf())
+            } else {
+                HybridFeatureContainer.uploadMessageForAndroid5!!.onReceiveValue(arrayOf(result))
+            }
+            HybridFeatureContainer.uploadMessageForAndroid5 = null
+        } else if (requestCode == ShareImpl.FACEBOOK_SHARE_RESULT_CODE) {
+            ShareImpl.instance.onShareResult(requestCode, resultCode, data)
+        }
     }
 
-    fun onNewIntent(activity: Activity, intent: Intent) {
+    fun onNewIntent(activity: Activity, intent: Intent?) {
         Logger.i("EYuanGameSdk onNewIntent ...")
     }
 

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

@@ -0,0 +1,104 @@
+package cn.yyxx.eyuangame.core.impl.center
+
+import android.app.Dialog
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.text.InputType
+import android.view.Gravity
+import android.view.View
+import android.view.Window
+import android.view.WindowManager
+import android.widget.Button
+import android.widget.ImageView
+import cn.yyxx.eyuangame.core.entity.ClickType
+import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
+import cn.yyxx.eyuangame.core.ui.EventEditText
+import cn.yyxx.support.DensityUtils
+import cn.yyxx.support.ResUtils
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/23
+ */
+class BindAccountContainer(context: Context) : Dialog(context) {
+
+    private lateinit var ivReturn: ImageView
+    private lateinit var eetAccount: EventEditText
+    private lateinit var eetPwd: EventEditText
+    private lateinit var btnConfirm: Button
+
+    private var imgShow = 0
+    private var imgHide = 0
+    private var isShowText = false
+
+    init {
+        setCanceledOnTouchOutside(true)
+        window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+        requestWindowFeature(Window.FEATURE_NO_TITLE)
+        initView(context)
+    }
+
+    private fun initView(context: Context) {
+        setContentView(ResUtils.getResId(context, "yyxx_member_bind_account", "layout"))
+
+        val attr = window?.attributes as WindowManager.LayoutParams
+        attr.height = DensityUtils.dip2px(context, 250f)
+        if (SdkBridgeImpl.isLand) {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] / 2
+        } else {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] - 80
+        }
+        attr.gravity = Gravity.CENTER
+
+        imgShow = ResUtils.getResId(context, "yyxx_show_img", "drawable")
+        imgHide = ResUtils.getResId(context, "yyxx_hide_img", "drawable")
+
+        ivReturn = findViewById(ResUtils.getResId(context, "yyxx_iv_return", "id"))
+        ivReturn.apply {
+            tag = ClickType.ACTION_RETURN
+            setOnClickListener {
+                dismiss()
+            }
+        }
+
+        eetAccount = findViewById(ResUtils.getResId(context, "yyxx_eet_account", "id"))
+        eetAccount.apply {
+            leftImageView.setBackgroundResource(ResUtils.getResId(context, "yyxx_account_img", "drawable"))
+            leftImageView.visibility = View.VISIBLE
+            rightImageView.visibility = View.GONE
+            editText.setHint(ResUtils.getResId(context, "yyxx_hint_bind_account_uname", "string"))
+        }
+
+        eetPwd = findViewById(ResUtils.getResId(context, "yyxx_eet_pwd", "id"))
+        eetPwd.apply {
+            editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+            leftImageView.setBackgroundResource(ResUtils.getResId(context, "yyxx_pwd_img", "drawable"))
+            leftImageView.visibility = View.VISIBLE
+            editText.setHint(ResUtils.getResId(context, "yyxx_hint_bind_account_pwd", "string"))
+            rightImageView.setBackgroundResource(imgShow)
+            rightImageView.visibility = View.VISIBLE
+            rightImageView.setOnClickListener {
+                if (!isShowText) {
+                    isShowText = true
+                    rightImageView.setBackgroundResource(imgHide)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
+                } else {
+                    isShowText = false
+                    rightImageView.setBackgroundResource(imgShow)
+                    editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
+                }
+                editText.setSelection(editText.length())
+            }
+        }
+
+        btnConfirm = findViewById(ResUtils.getResId(context, "yyxx_btn_confirm", "id"))
+        btnConfirm.apply {
+            tag = ClickType.ACTION_CONFIRM
+            setOnClickListener {
+
+            }
+        }
+    }
+
+}

+ 66 - 83
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/BindPhoneFragment.kt → library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/BindPhoneContainer.kt

@@ -1,43 +1,35 @@
-package cn.yyxx.eyuangame.core.impl.center.fragment
+package cn.yyxx.eyuangame.core.impl.center
 
+import android.app.Dialog
 import android.content.Context
 import android.graphics.Color
-import android.os.Bundle
+import android.graphics.drawable.ColorDrawable
 import android.os.Handler
 import android.os.Looper
 import android.os.Message
 import android.text.TextUtils
-import android.view.Gravity
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
+import android.view.*
 import android.widget.*
 import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.fragment.app.Fragment
 import cn.yyxx.eyuangame.base.utils.Logger
-import cn.yyxx.eyuangame.core.entity.ClickType
 import cn.yyxx.eyuangame.core.entity.ResultInfo
 import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
 import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
-import cn.yyxx.eyuangame.core.impl.center.MemberActivity
 import cn.yyxx.eyuangame.core.internal.IRequestCallback
 import cn.yyxx.eyuangame.core.network.SdkRequest
 import cn.yyxx.eyuangame.core.ui.EventEditText
 import cn.yyxx.eyuangame.core.utils.EditTextUtils
 import cn.yyxx.eyuangame.core.utils.TimeDownUtils
+import cn.yyxx.support.DensityUtils
 import cn.yyxx.support.ResUtils
 import cn.yyxx.support.hawkeye.ToastUtils
 import org.json.JSONObject
 
 /**
  * @author #Suyghur.
- * Created on 2021/06/30
+ * Created on 2021/12/23
  */
-class BindPhoneFragment : Fragment(), View.OnClickListener {
-
-    private lateinit var mView: View
-    private lateinit var memberImpl: MemberActivity
-
+class BindPhoneContainer(context: Context) : Dialog(context) {
     private lateinit var llGroup1: LinearLayout
     private lateinit var llGroup2: LinearLayout
     private lateinit var clTips: ConstraintLayout
@@ -70,62 +62,71 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
         }
     }
 
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
-        super.onCreateView(inflater, container, savedInstanceState)
-        memberImpl = requireActivity() as MemberActivity
-        mView = layoutInflater.inflate(ResUtils.getResId(requireActivity(), "yyxx_member_bind_phone", "layout"), container, false)
-        initView(mView)
-        return mView
+    init {
+        setCanceledOnTouchOutside(true)
+        window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+        requestWindowFeature(Window.FEATURE_NO_TITLE)
+        initView(context)
     }
 
-    private fun initView(view: View) {
+    private fun initView(context: Context) {
+        setContentView(ResUtils.getResId(context, "yyxx_member_bind_phone", "layout"))
+
+        val attr = window?.attributes as WindowManager.LayoutParams
+        attr.height = DensityUtils.dip2px(context, 250f)
+        if (SdkBridgeImpl.isLand) {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] / 2
+        } else {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] - 80
+        }
+        attr.gravity = Gravity.CENTER
 
         imgUp = ResUtils.getResId(context, "yyxx_pack_up_white_img", "drawable")
         imgDown = ResUtils.getResId(context, "yyxx_pack_down_white_img", "drawable")
 
-        ivReturn = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_return", "id"))
-        ivReturn.apply {
-            tag = ClickType.ACTION_RETURN
-            setOnClickListener(this@BindPhoneFragment)
+        ivReturn = findViewById(ResUtils.getResId(context, "yyxx_iv_return", "id"))
+
+        ivReturn.setOnClickListener {
+            dismiss()
+
         }
 
-        llGroup1 = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_ll_group1", "id"))
-        llGroup2 = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_ll_group2", "id"))
-        clTips = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_cl_tips", "id"))
+        llGroup1 = findViewById(ResUtils.getResId(context, "yyxx_ll_group1", "id"))
+        llGroup2 = findViewById(ResUtils.getResId(context, "yyxx_ll_group2", "id"))
+        clTips = findViewById(ResUtils.getResId(context, "yyxx_cl_tips", "id"))
 
-        eetPhone = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_phone", "id"))
-        eetPhone.editText.hint = ResUtils.getResString(requireActivity(), "yyxx_hint_forget_phone")
+        eetPhone = findViewById(ResUtils.getResId(context, "yyxx_eet_phone", "id"))
+        eetPhone.editText.hint = ResUtils.getResString(context, "yyxx_hint_forget_phone")
 
-        eetCaptcha = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_captcha", "id"))
-        eetCaptcha.editText.hint = ResUtils.getResString(requireActivity(), "yyxx_hint_bind_phone_captcha")
+        eetCaptcha = findViewById(ResUtils.getResId(context, "yyxx_eet_captcha", "id"))
+        eetCaptcha.editText.hint = ResUtils.getResString(context, "yyxx_hint_bind_phone_captcha")
 
-        btnCaptCha = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_captcha", "id"))
-        btnCaptCha.apply {
-            tag = ClickType.ACTION_GET_CAPTCHA
-            setOnClickListener(this@BindPhoneFragment)
+        btnCaptCha = findViewById(ResUtils.getResId(context, "yyxx_btn_captcha", "id"))
+        btnCaptCha.setOnClickListener {
+            callGetCaptcha()
         }
 
-        btnConfirm = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_confirm", "id"))
-        btnConfirm.apply {
-            tag = ClickType.ACTION_CONFIRM
-            setOnClickListener(this@BindPhoneFragment)
+
+        btnConfirm = findViewById(ResUtils.getResId(context, "yyxx_btn_confirm", "id"))
+        btnConfirm.setOnClickListener {
+            callBindPhone()
         }
 
-        rlAreaList = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_rl_area_list", "id"))
+        rlAreaList = findViewById(ResUtils.getResId(context, "yyxx_rl_area_list", "id"))
         rlAreaList.visibility = View.GONE
-        llAreaList = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_ll_area_list", "id"))
-        svAreaList = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_sv_area_list", "id"))
+        llAreaList = findViewById(ResUtils.getResId(context, "yyxx_ll_area_list", "id"))
+        svAreaList = findViewById(ResUtils.getResId(context, "yyxx_sv_area_list", "id"))
 
 
-        tvArea = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_tv_area", "id"))
-        ivArrow = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_arrow", "id"))
+        tvArea = findViewById(ResUtils.getResId(context, "yyxx_tv_area", "id"))
+        ivArrow = findViewById(ResUtils.getResId(context, "yyxx_iv_arrow", "id"))
         ivArrow.setOnClickListener {
             changeAreaList()
         }
 
-        autoFillAreaList(requireActivity())
+        autoFillAreaList(context)
 
-        tvBindTips = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_tv_tips2", "id"))
+        tvBindTips = findViewById(ResUtils.getResId(context, "yyxx_tv_tips2", "id"))
         val tipsPhone = if (SdkBackLoginInfo.instance.phoneNum.length > 6) {
             val head = SdkBackLoginInfo.instance.phoneNum.substring(0, 3)
             val foot = SdkBackLoginInfo.instance.phoneNum.substring(SdkBackLoginInfo.instance.phoneNum.length - 3, SdkBackLoginInfo.instance.phoneNum.length)
@@ -133,7 +134,9 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
         } else {
             SdkBackLoginInfo.instance.phoneNum
         }
-        tvBindTips.text = "${ResUtils.getResString(requireActivity(), "yyxx_iv_bind_phone_tips2")}$tipsPhone"
+        tvBindTips.text = "${ResUtils.getResString(context, "yyxx_iv_bind_phone_tips2")}$tipsPhone"
+
+        showOrHideTips()
     }
 
     private fun autoFillAreaList(context: Context) {
@@ -218,13 +221,13 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
         Logger.d("$areaCode ...")
         val phoneNum = eetPhone.editText.text.trim().toString()
 
-        if (TextUtils.isEmpty(areaCode) || areaCode == ResUtils.getResString(requireActivity(), "yyxx_tv_area_code")) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_area_code_format_error"))
+        if (TextUtils.isEmpty(areaCode) || areaCode == ResUtils.getResString(context, "yyxx_tv_area_code")) {
+            ToastUtils.toastInfo(context, ResUtils.getResString(context, "yyxx_tips_area_code_format_error"))
             return
         }
 
         if (!EditTextUtils.filterPwd(phoneNum)) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_phone_format_error"))
+            ToastUtils.toastInfo(context, ResUtils.getResString(context, "yyxx_tips_phone_format_error"))
             return
         }
 
@@ -233,13 +236,13 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
                 put("sms_type", "bind_phone")
                 put("area_code", areaCode)
                 put("phone_number", phoneNum)
-                SdkRequest.instance.getCaptcha(requireActivity(), this, object : IRequestCallback {
+                SdkRequest.instance.getCaptcha(context, this, object : IRequestCallback {
                     override fun onResponse(resultInfo: ResultInfo) {
                         if (resultInfo.code == 1) {
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
+                            ToastUtils.toastInfo(context, resultInfo.msg)
                             changeTimeNum()
                         } else {
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
+                            ToastUtils.toastInfo(context, resultInfo.msg)
                         }
                     }
                 })
@@ -254,11 +257,11 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
         val captcha = eetCaptcha.editText.text.trim().toString()
 
         if (TextUtils.isEmpty(captcha)) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_captcha_format_error"))
+            ToastUtils.toastInfo(context, ResUtils.getResString(context, "yyxx_tips_captcha_format_error"))
             return
         }
         if (!EditTextUtils.filterPhone(phoneNum)) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_phone_format_error"))
+            ToastUtils.toastInfo(context, ResUtils.getResString(context, "yyxx_tips_phone_format_error"))
             return
         }
 
@@ -267,14 +270,14 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
                 put("uid", SdkBackLoginInfo.instance.userId)
                 put("phone_number", phoneNum)
                 put("sms_code", captcha)
-                SdkRequest.instance.bindPhone(requireActivity(), this, object : IRequestCallback {
+                SdkRequest.instance.bindPhone(context, this, object : IRequestCallback {
                     override fun onResponse(resultInfo: ResultInfo) {
                         if (resultInfo.code == 1) {
                             SdkBackLoginInfo.instance.phoneNum = phoneNum
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
-                            requireActivity().onBackPressed()
+                            ToastUtils.toastInfo(context, resultInfo.msg)
+                            dismiss()
                         } else {
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
+                            ToastUtils.toastInfo(context, resultInfo.msg)
                         }
                     }
                 })
@@ -288,7 +291,7 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
         btnCaptCha.apply {
             text = if (time <= 0) {
                 this.isEnabled = true
-                ResUtils.getResString(requireActivity(), "yyxx_tv_get_captcha")
+                ResUtils.getResString(context, "yyxx_tv_get_captcha")
             } else {
                 this.isEnabled = false
                 "${time}s"
@@ -332,26 +335,6 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
         }
     }
 
-    override fun onResume() {
-        super.onResume()
-        showOrHideTips()
-    }
-
-    override fun onDestroy() {
-        super.onDestroy()
-        areaCodeList.clear()
-        rlAreaList.visibility = View.GONE
-    }
-
-    override fun onClick(v: View?) {
-        v?.apply {
-            when (tag as Int) {
-                ClickType.ACTION_RETURN -> requireActivity().onBackPressed()
-                ClickType.ACTION_GET_CAPTCHA -> callGetCaptcha()
-                ClickType.ACTION_CONFIRM -> callBindPhone()
-            }
-        }
-    }
 
     /**
      * 账号列表item点击事件
@@ -361,7 +344,7 @@ class BindPhoneFragment : Fragment(), View.OnClickListener {
             tvArea.apply {
                 changeAreaList()
                 tvArea.text = areaCode
-                this@BindPhoneFragment.code = areaCode
+                this@BindPhoneContainer.code = areaCode
             }
         }
     }

+ 59 - 104
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/HybridActivity.kt → library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/HybridFeatureContainer.kt

@@ -1,19 +1,19 @@
 package cn.yyxx.eyuangame.core.impl.center
 
 import android.app.Activity
+import android.app.Dialog
 import android.content.Context
 import android.content.Intent
 import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
 import android.net.Uri
 import android.net.http.SslError
-import android.os.Bundle
-import android.view.View
-import android.view.WindowManager
+import android.text.TextUtils
+import android.view.*
 import android.webkit.*
 import android.widget.FrameLayout
 import android.widget.ImageView
 import cn.yyxx.eyuangame.base.utils.Logger
-import cn.yyxx.eyuangame.core.entity.ClickType
 import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
 import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
 import cn.yyxx.eyuangame.core.impl.SdkDrive
@@ -23,7 +23,7 @@ import cn.yyxx.eyuangame.core.internal.IImplCallback
 import cn.yyxx.eyuangame.core.internal.IJsCallback
 import cn.yyxx.eyuangame.core.network.Host
 import cn.yyxx.eyuangame.core.ui.dialog.ScaleLoadingDialog
-import cn.yyxx.support.AndroidBug5497Workaround
+import cn.yyxx.support.DensityUtils
 import cn.yyxx.support.JsonUtils
 import cn.yyxx.support.ResUtils
 import cn.yyxx.support.device.DeviceInfoUtils
@@ -33,34 +33,40 @@ import org.json.JSONObject
  * @author #Suyghur.
  * Created on 2021/07/02
  */
-class HybridActivity : Activity(), View.OnClickListener {
+class HybridFeatureContainer(private val activity: Activity, private val url: String) : Dialog(activity) {
 
-    private var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
+    companion object {
+        const val FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5 = 2
+        var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
+    }
+
+    //    private var uploadMessageForAndroid5: ValueCallback<Array<Uri>>? = null
     private lateinit var container: FrameLayout
     private lateinit var webView: WebView
     private lateinit var ivClose: ImageView
     private var loadingDialog: ScaleLoadingDialog? = null
 
-
-    private val callback = object : IJsCallback {
+    private val jsCallback = object : IJsCallback {
 
         override fun onCallback(method: String, data: String): String {
+            Logger.d("method: $method")
             when (method) {
-                "getCommon" -> return SdkDrive.instance.getComm(this@HybridActivity)
+                "getCommon" -> return SdkDrive.instance.getComm(activity)
                 "getToken" -> return SdkBackLoginInfo.instance.token
                 "close" -> {
-                    runOnUiThread {
-                        this@HybridActivity.finish()
+                    activity.runOnUiThread {
+                        dismiss()
                     }
                 }
                 "back" -> {
-                    runOnUiThread {
+                    activity.runOnUiThread {
                         onBackPressed()
                     }
                 }
                 "facebookShare" -> {
                     kotlin.runCatching {
                         val jsonObject = JSONObject(data)
+                        Logger.d(jsonObject.toString())
                         val line = if (JsonUtils.hasJsonKey(jsonObject, "line")) {
                             jsonObject.getString("line")
                         } else {
@@ -76,7 +82,7 @@ class HybridActivity : Activity(), View.OnClickListener {
                         } else {
                             ""
                         }
-                        ShareImpl.instance.invokeShare2Fb(this@HybridActivity, line, tag, quote, object : IImplCallback {
+                        ShareImpl.instance.invokeShare2Fb(activity, line, tag, quote, object : IImplCallback {
                             override fun onResult(code: Int, result: String) {
                                 Logger.d("invokeShare2Fb onResult")
                                 if (code == 0) {
@@ -102,52 +108,58 @@ class HybridActivity : Activity(), View.OnClickListener {
                     }
                     return jsonObject.toString()
                 }
+                "jump2bindPhone" -> {
+                    if (TextUtils.isEmpty(SdkBackLoginInfo.instance.phoneNum)) {
+                        activity.runOnUiThread {
+                            MemberCenterContainer(context).show()
+                            dismiss()
+                        }
+                    }
+                }
             }
             return ""
         }
 
     }
 
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        initView()
-        initWebView()
+
+    init {
+        setCanceledOnTouchOutside(true)
+        window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+        requestWindowFeature(Window.FEATURE_NO_TITLE)
+        initView(context)
     }
 
-    private fun initView() {
-        if (SdkBridgeImpl.isLand) {
-            window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-        }
-        setContentView(ResUtils.getResId(this, "yyxx_hybrid", "layout"))
+    private fun initView(context: Context) {
+        setContentView(ResUtils.getResId(activity, "yyxx_hybrid", "layout"))
 
-        if (!SdkBridgeImpl.isLand) {
-            AndroidBug5497Workaround.assistActivity(this)
+        val attr = window?.attributes as WindowManager.LayoutParams
+        attr.height = ViewGroup.LayoutParams.WRAP_CONTENT
+        if (SdkBridgeImpl.isLand) {
+            attr.width = (3 * DensityUtils.getHeightAndWidth(context)[0]) / 4
+        } else {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] - 80
         }
+//        attr.width = ViewGroup.LayoutParams.WRAP_CONTENT
+        attr.gravity = Gravity.CENTER
+        showDialog(context)
+        initWebView()
 
-//        tvTitle = findViewById(ResUtils.getResId(this, "yyxx_tv_title", "id"))
-//        ivReturn = findViewById(ResUtils.getResId(this, "yyxx_iv_return", "id"))
-//        ivReturn.apply {
-//            tag = ClickType.ACTION_RETURN
-//            setOnClickListener(this@HybridActivity)
-//        }
-
-        showDialog(this)
     }
 
-
     private fun initWebView() {
-        container = findViewById(ResUtils.getResId(this, "yyxx_webview_container", "id"))
+        container = findViewById(ResUtils.getResId(activity, "yyxx_webview_container", "id"))
 
-        webView = findViewById(ResUtils.getResId(this, "yyxx_webview", "id"))
+        webView = findViewById(ResUtils.getResId(activity, "yyxx_webview", "id"))
         webView.isVerticalScrollBarEnabled = true
         webView.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY
-        webView.addJavascriptInterface(SdkJsImpl(callback), "eyuangame")
+        webView.addJavascriptInterface(SdkJsImpl(jsCallback), "eyuangame")
         webView.setBackgroundColor(Color.TRANSPARENT)
 
-        ivClose = findViewById(ResUtils.getResId(this, "yyxx_iv_close", "id"))
+        ivClose = findViewById(ResUtils.getResId(activity, "yyxx_iv_close", "id"))
         ivClose.visibility = View.GONE
         ivClose.setOnClickListener {
-            this.finish()
+            activity.finish()
         }
 
 //        webView.viewTreeObserver.addOnGlobalLayoutListener {
@@ -172,15 +184,15 @@ class HybridActivity : Activity(), View.OnClickListener {
         webSetting.javaScriptEnabled = true
         webSetting.setGeolocationEnabled(true)
         webSetting.setAppCacheMaxSize(Long.MAX_VALUE)
-        webSetting.setAppCachePath(getDir("appcache", 0).path)
-        webSetting.databasePath = getDir("databases", 0).path
-        webSetting.setGeolocationDatabasePath(getDir("geolocation", 0).path)
+        webSetting.setAppCachePath(activity.getDir("appcache", 0).path)
+        webSetting.databasePath = activity.getDir("databases", 0).path
+        webSetting.setGeolocationDatabasePath(activity.getDir("geolocation", 0).path)
         webSetting.pluginState = WebSettings.PluginState.ON_DEMAND
         webSetting.cacheMode = WebSettings.LOAD_NO_CACHE
-        CookieSyncManager.createInstance(this)
+        CookieSyncManager.createInstance(activity)
         CookieSyncManager.getInstance().sync()
 
-        if (DeviceInfoUtils.isNetworkConnected(this)) {
+        if (DeviceInfoUtils.isNetworkConnected(activity)) {
             webView.loadUrl(url)
 //            webView.loadUrl("file:///android_asset/test.html");
         } else {
@@ -276,43 +288,6 @@ class HybridActivity : Activity(), View.OnClickListener {
         }
     }
 
-    override fun onNewIntent(intent: Intent?) {
-        super.onNewIntent(intent)
-    }
-
-    override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
-        super.onActivityResult(requestCode, resultCode, intent)
-
-        if (requestCode == FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5) {
-            Logger.d("onActivityResult FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5")
-            if (uploadMessageForAndroid5 == null) {
-                Logger.d("mUploadMessageForAndroid5 == null")
-                return
-            }
-            if (intent == null) {
-                uploadMessageForAndroid5!!.onReceiveValue(arrayOf())
-                return
-            }
-            val result = if (resultCode != RESULT_OK) null else intent.data
-            if (result == null) {
-                uploadMessageForAndroid5!!.onReceiveValue(arrayOf())
-            } else {
-                uploadMessageForAndroid5!!.onReceiveValue(arrayOf(result))
-            }
-            uploadMessageForAndroid5 = null
-        } else {
-            ShareImpl.instance.onShareResult(requestCode, resultCode, intent)
-        }
-    }
-
-    override fun onResume() {
-        super.onResume()
-    }
-
-    override fun onDestroy() {
-        super.onDestroy()
-    }
-
     private fun showDialog(context: Context) {
         loadingDialog?.apply {
             dismiss()
@@ -340,7 +315,7 @@ class HybridActivity : Activity(), View.OnClickListener {
             } else {
                 Intent(Intent.ACTION_VIEW, Uri.parse(url))
             }
-            startActivity(intent)
+            activity.startActivity(intent)
         } catch (e: Exception) {
             e.printStackTrace()
             Logger.e("${e.message}")
@@ -358,34 +333,14 @@ class HybridActivity : Activity(), View.OnClickListener {
         chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent)
         chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser")
 
-        startActivityForResult(chooserIntent, FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5)
+        activity.startActivityForResult(chooserIntent, FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5)
     }
 
     override fun onBackPressed() {
         if (webView.canGoBack()) {
             webView.goBack()
         } else {
-            finish()
-        }
-    }
-
-    override fun onClick(v: View?) {
-        v?.apply {
-            when (tag as Int) {
-                ClickType.ACTION_RETURN -> this@HybridActivity.finish()
-            }
-        }
-    }
-
-    companion object {
-
-        private const val FILE_CHOOSER_RESULT_CODE_FOR_ANDROID_5 = 2
-
-        private var url = ""
-
-        fun start(activity: Activity, url: String) {
-            Companion.url = url
-            activity.startActivity(Intent(activity, HybridActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
+            dismiss()
         }
     }
 

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

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

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

@@ -0,0 +1,143 @@
+package cn.yyxx.eyuangame.core.impl.center
+
+import android.app.Dialog
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.text.TextUtils
+import android.view.Gravity
+import android.view.View
+import android.view.Window
+import android.view.WindowManager
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import cn.yyxx.eyuangame.core.entity.LoginType
+import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
+import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
+import cn.yyxx.support.DensityUtils
+import cn.yyxx.support.ResUtils
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/23
+ */
+class MemberCenterContainer(context: Context) : Dialog(context) {
+
+    private lateinit var ivReturn: ImageView
+    private lateinit var clBindAccount: ConstraintLayout
+    private lateinit var clBindPhone: ConstraintLayout
+    private lateinit var clModifyPwd: ConstraintLayout
+
+    private lateinit var ivAccountIcon: ImageView
+    private lateinit var tvAccountTips: TextView
+
+    private var bindAccountContainer: BindAccountContainer? = null
+    private var bindPhoneContainer: BindPhoneContainer? = null
+    private var modifyPwdContainer: ModifyPwdContainer? = null
+
+
+    init {
+        setCanceledOnTouchOutside(true)
+        window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+        requestWindowFeature(Window.FEATURE_NO_TITLE)
+        initView(context)
+    }
+
+    private fun initView(context: Context) {
+        setContentView(ResUtils.getResId(context, "yyxx_member_center", "layout"))
+
+        val attr = window?.attributes as WindowManager.LayoutParams
+        attr.height = DensityUtils.dip2px(context, 250f)
+        if (SdkBridgeImpl.isLand) {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] / 2
+        } else {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] - 80
+        }
+        attr.gravity = Gravity.CENTER
+
+        ivReturn = findViewById(ResUtils.getResId(context, "yyxx_iv_return", "id"))
+        ivReturn.setOnClickListener {
+            dismiss()
+        }
+
+
+        clBindAccount = findViewById(ResUtils.getResId(context, "yyxx_cl_bind_account", "id"))
+        clBindAccount.setOnClickListener {
+            bindAccountContainer?.apply {
+                dismiss()
+                bindAccountContainer = null
+            }
+            bindAccountContainer = BindAccountContainer(context)
+            bindAccountContainer?.show()
+        }
+        clBindPhone = findViewById(ResUtils.getResId(context, "yyxx_cl_bind_phone", "id"))
+        clBindPhone.setOnClickListener {
+            bindPhoneContainer?.apply {
+                dismiss()
+                bindPhoneContainer = null
+            }
+            bindPhoneContainer = BindPhoneContainer(context)
+            bindPhoneContainer?.show()
+        }
+
+        clModifyPwd = findViewById(ResUtils.getResId(context, "yyxx_cl_modify_pwd", "id"))
+        clModifyPwd.setOnClickListener {
+            modifyPwdContainer?.apply {
+                dismiss()
+                modifyPwdContainer = null
+            }
+            modifyPwdContainer = ModifyPwdContainer(context)
+            modifyPwdContainer?.show()
+        }
+
+        ivAccountIcon = findViewById(ResUtils.getResId(context, "yyxx_iv_bind_account_icon", "id"))
+        tvAccountTips = findViewById(ResUtils.getResId(context, "yyxx_tv_bind_account_tips", "id"))
+        var img = 0
+        var tips = ""
+        when (SdkBackLoginInfo.instance.loginType) {
+            LoginType.TYPE_GUEST_LOGIN -> {
+                img = ResUtils.getResId(context, "yyxx_guest_img", "drawable")
+                tips = ResUtils.getResString(context, "yyxx_login_type_guest")
+            }
+            LoginType.TYPE_FACEBOOK_LOGIN -> {
+                img = ResUtils.getResId(context, "yyxx_facebook_img", "drawable")
+                tips = ResUtils.getResString(context, "yyxx_login_type_facebook")
+            }
+            LoginType.TYPE_GOOGLE_LOGIN -> {
+                img = ResUtils.getResId(context, "yyxx_google_img", "drawable")
+                tips = ResUtils.getResString(context, "yyxx_login_type_google")
+            }
+        }
+        ivAccountIcon.setBackgroundResource(img)
+        tvAccountTips.text = tips
+
+        showOrHideBindAccount()
+        showOrHideBindPhone()
+        showOrHideModifyPwd()
+    }
+
+    private fun showOrHideBindAccount() {
+        clBindAccount.visibility = if (SdkBackLoginInfo.instance.hasBindAccount) {
+            View.GONE
+        } else {
+            View.VISIBLE
+        }
+    }
+
+    private fun showOrHideBindPhone() {
+        clBindPhone.visibility = if (SdkBackLoginInfo.instance.hasBindAccount) {
+            View.VISIBLE
+        } else {
+            View.GONE
+        }
+    }
+
+    private fun showOrHideModifyPwd() {
+        clModifyPwd.visibility = if (SdkBackLoginInfo.instance.hasBindAccount && !TextUtils.isEmpty(SdkBackLoginInfo.instance.phoneNum)) {
+            View.VISIBLE
+        } else {
+            View.GONE
+        }
+    }
+}

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

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

+ 48 - 50
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/fragment/ModifyPwdFragment.kt → library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/ModifyPwdContainer.kt

@@ -1,33 +1,33 @@
-package cn.yyxx.eyuangame.core.impl.center.fragment
+package cn.yyxx.eyuangame.core.impl.center
 
-import android.os.Bundle
+import android.app.Dialog
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
 import android.text.InputType
-import android.view.LayoutInflater
+import android.view.Gravity
 import android.view.View
-import android.view.ViewGroup
+import android.view.Window
+import android.view.WindowManager
 import android.widget.Button
 import android.widget.ImageView
-import androidx.fragment.app.Fragment
-import cn.yyxx.eyuangame.core.entity.ClickType
 import cn.yyxx.eyuangame.core.entity.ResultInfo
 import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
-import cn.yyxx.eyuangame.core.impl.center.MemberActivity
+import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
 import cn.yyxx.eyuangame.core.internal.IRequestCallback
 import cn.yyxx.eyuangame.core.network.SdkRequest
 import cn.yyxx.eyuangame.core.ui.EventEditText
 import cn.yyxx.eyuangame.core.utils.EditTextUtils
+import cn.yyxx.support.DensityUtils
 import cn.yyxx.support.ResUtils
 import cn.yyxx.support.hawkeye.ToastUtils
 import org.json.JSONObject
 
 /**
  * @author #Suyghur.
- * Created on 2021/06/30
+ * Created on 2021/12/23
  */
-class ModifyPwdFragment : Fragment(), View.OnClickListener {
-
-    private lateinit var mView: View
-    private lateinit var memberImpl: MemberActivity
+class ModifyPwdContainer(context: Context) : Dialog(context) {
 
     private lateinit var ivReturn: ImageView
     private lateinit var eetOldPwd: EventEditText
@@ -39,31 +39,39 @@ class ModifyPwdFragment : Fragment(), View.OnClickListener {
     private var isShowOldText = false
     private var isShowNewText = false
 
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
-        super.onCreateView(inflater, container, savedInstanceState)
-        memberImpl = requireActivity() as MemberActivity
-        mView = layoutInflater.inflate(ResUtils.getResId(requireActivity(), "yyxx_member_modify_pwd", "layout"), container, false)
-        initView(mView)
-        return mView
+    init {
+        setCanceledOnTouchOutside(true)
+        window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+        requestWindowFeature(Window.FEATURE_NO_TITLE)
+        initView(context)
     }
 
-    private fun initView(view: View) {
+    private fun initView(context: Context) {
+        setContentView(ResUtils.getResId(context, "yyxx_member_modify_pwd", "layout"))
+
+        val attr = window?.attributes as WindowManager.LayoutParams
+        attr.height = DensityUtils.dip2px(context, 250f)
+        if (SdkBridgeImpl.isLand) {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] / 2
+        } else {
+            attr.width = DensityUtils.getHeightAndWidth(context)[0] - 80
+        }
+        attr.gravity = Gravity.CENTER
 
-        imgShow = ResUtils.getResId(requireActivity(), "yyxx_show_img", "drawable")
-        imgHide = ResUtils.getResId(requireActivity(), "yyxx_hide_img", "drawable")
+        imgShow = ResUtils.getResId(context, "yyxx_show_img", "drawable")
+        imgHide = ResUtils.getResId(context, "yyxx_hide_img", "drawable")
 
-        ivReturn = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_return", "id"))
-        ivReturn.apply {
-            tag = ClickType.ACTION_RETURN
-            setOnClickListener(this@ModifyPwdFragment)
+        ivReturn = findViewById(ResUtils.getResId(context, "yyxx_iv_return", "id"))
+        ivReturn.setOnClickListener {
+            dismiss()
         }
 
-        eetOldPwd = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_old_pwd", "id"))
+        eetOldPwd = findViewById(ResUtils.getResId(context, "yyxx_eet_old_pwd", "id"))
         eetOldPwd.apply {
             editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
-            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_pwd_img", "drawable"))
+            leftImageView.setBackgroundResource(ResUtils.getResId(context, "yyxx_pwd_img", "drawable"))
             leftImageView.visibility = View.VISIBLE
-            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_modify_pwd_old", "string"))
+            editText.setHint(ResUtils.getResId(context, "yyxx_hint_modify_pwd_old", "string"))
             rightImageView.setBackgroundResource(imgShow)
             rightImageView.visibility = View.VISIBLE
             rightImageView.setOnClickListener {
@@ -81,12 +89,12 @@ class ModifyPwdFragment : Fragment(), View.OnClickListener {
         }
 
 
-        eetNewPwd = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_new_pwd", "id"))
+        eetNewPwd = findViewById(ResUtils.getResId(context, "yyxx_eet_new_pwd", "id"))
         eetNewPwd.apply {
             editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
-            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_pwd_img", "drawable"))
+            leftImageView.setBackgroundResource(ResUtils.getResId(context, "yyxx_pwd_img", "drawable"))
             leftImageView.visibility = View.VISIBLE
-            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_modify_pwd_new", "string"))
+            editText.setHint(ResUtils.getResId(context, "yyxx_hint_modify_pwd_new", "string"))
             rightImageView.setBackgroundResource(imgShow)
             rightImageView.visibility = View.VISIBLE
             rightImageView.setOnClickListener {
@@ -103,12 +111,10 @@ class ModifyPwdFragment : Fragment(), View.OnClickListener {
             }
         }
 
-        btnConfirm = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_confirm", "id"))
-        btnConfirm.apply {
-            tag = ClickType.ACTION_CONFIRM
-            setOnClickListener(this@ModifyPwdFragment)
+        btnConfirm = findViewById(ResUtils.getResId(context, "yyxx_btn_confirm", "id"))
+        btnConfirm.setOnClickListener {
+            callModifyPwd()
         }
-
     }
 
     private fun callModifyPwd() {
@@ -116,12 +122,12 @@ class ModifyPwdFragment : Fragment(), View.OnClickListener {
         val newPwd = eetNewPwd.editText.text.trim().toString()
 
         if (!EditTextUtils.filterPwd(oldPwd)) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_old_pwd_format_error"))
+            ToastUtils.toastInfo(context, ResUtils.getResString(context, "yyxx_tips_old_pwd_format_error"))
             return
         }
 
         if (!EditTextUtils.filterPwd(newPwd)) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_new_pwd_format_error"))
+            ToastUtils.toastInfo(context, ResUtils.getResString(context, "yyxx_tips_new_pwd_format_error"))
             return
         }
 
@@ -130,13 +136,13 @@ class ModifyPwdFragment : Fragment(), View.OnClickListener {
                 put("uid", SdkBackLoginInfo.instance.userId)
                 put("pwd", oldPwd)
                 put("new_pwd", newPwd)
-                SdkRequest.instance.modifyUserPwd(requireActivity(), this, object : IRequestCallback {
+                SdkRequest.instance.modifyUserPwd(context, this, object : IRequestCallback {
                     override fun onResponse(resultInfo: ResultInfo) {
                         if (resultInfo.code == 1) {
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
-                            requireActivity().onBackPressed()
+                            ToastUtils.toastInfo(context, resultInfo.msg)
+                            dismiss()
                         } else {
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
+                            ToastUtils.toastInfo(context, resultInfo.msg)
                         }
                     }
 
@@ -147,12 +153,4 @@ class ModifyPwdFragment : Fragment(), View.OnClickListener {
         }
     }
 
-    override fun onClick(v: View?) {
-        v?.apply {
-            when (tag as Int) {
-                ClickType.ACTION_RETURN -> requireActivity().onBackPressed()
-                ClickType.ACTION_CONFIRM -> callModifyPwd()
-            }
-        }
-    }
 }

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

@@ -1,142 +0,0 @@
-package cn.yyxx.eyuangame.core.impl.center.fragment
-
-import android.os.Bundle
-import android.text.InputType
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import android.widget.ImageView
-import androidx.fragment.app.Fragment
-import cn.yyxx.eyuangame.core.entity.ClickType
-import cn.yyxx.eyuangame.core.entity.ResultInfo
-import cn.yyxx.eyuangame.core.entity.SdkBackLoginInfo
-import cn.yyxx.eyuangame.core.impl.center.MemberActivity
-import cn.yyxx.eyuangame.core.internal.IRequestCallback
-import cn.yyxx.eyuangame.core.network.SdkRequest
-import cn.yyxx.eyuangame.core.ui.EventEditText
-import cn.yyxx.eyuangame.core.utils.EditTextUtils
-import cn.yyxx.support.ResUtils
-import cn.yyxx.support.hawkeye.ToastUtils
-import org.json.JSONObject
-
-/**
- * @author #Suyghur.
- * Created on 2021/06/30
- */
-class BindAccountFragment : Fragment(), View.OnClickListener {
-
-    private lateinit var mView: View
-    private lateinit var memberImpl: MemberActivity
-
-    private lateinit var ivReturn: ImageView
-    private lateinit var eetAccount: EventEditText
-    private lateinit var eetPwd: EventEditText
-    private lateinit var btnConfirm: Button
-
-    private var imgShow = 0
-    private var imgHide = 0
-    private var isShowText = false
-
-    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
-        super.onCreateView(inflater, container, savedInstanceState)
-        memberImpl = requireActivity() as MemberActivity
-        mView = layoutInflater.inflate(ResUtils.getResId(requireActivity(), "yyxx_member_bind_account", "layout"), container, false)
-        initView(mView)
-        return mView
-    }
-
-    private fun initView(view: View) {
-
-        imgShow = ResUtils.getResId(requireActivity(), "yyxx_show_img", "drawable")
-        imgHide = ResUtils.getResId(requireActivity(), "yyxx_hide_img", "drawable")
-
-        ivReturn = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_iv_return", "id"))
-        ivReturn.apply {
-            tag = ClickType.ACTION_RETURN
-            setOnClickListener(this@BindAccountFragment)
-        }
-
-        eetAccount = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_account", "id"))
-        eetAccount.apply {
-            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_account_img", "drawable"))
-            leftImageView.visibility = View.VISIBLE
-            rightImageView.visibility = View.GONE
-            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_bind_account_uname", "string"))
-        }
-
-        eetPwd = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_eet_pwd", "id"))
-        eetPwd.apply {
-            editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
-            leftImageView.setBackgroundResource(ResUtils.getResId(requireActivity(), "yyxx_pwd_img", "drawable"))
-            leftImageView.visibility = View.VISIBLE
-            editText.setHint(ResUtils.getResId(requireActivity(), "yyxx_hint_bind_account_pwd", "string"))
-            rightImageView.setBackgroundResource(imgShow)
-            rightImageView.visibility = View.VISIBLE
-            rightImageView.setOnClickListener {
-                if (!isShowText) {
-                    isShowText = true
-                    rightImageView.setBackgroundResource(imgHide)
-                    editText.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
-                } else {
-                    isShowText = false
-                    rightImageView.setBackgroundResource(imgShow)
-                    editText.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD or InputType.TYPE_CLASS_TEXT
-                }
-                editText.setSelection(editText.length())
-            }
-        }
-
-        btnConfirm = view.findViewById(ResUtils.getResId(requireActivity(), "yyxx_btn_confirm", "id"))
-        btnConfirm.apply {
-            tag = ClickType.ACTION_CONFIRM
-            setOnClickListener(this@BindAccountFragment)
-        }
-    }
-
-    private fun callBindAccount() {
-        val userName = eetAccount.editText.text.trim().toString()
-        val pwd = eetPwd.editText.text.trim().toString()
-
-        if (!EditTextUtils.filterAccount(userName)) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_account_format_error"))
-            return
-        }
-        if (!EditTextUtils.filterPwd(pwd)) {
-            ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tips_pwd_format_error"))
-            return
-        }
-
-        try {
-            with(JSONObject()) {
-                put("uid", SdkBackLoginInfo.instance.userId)
-                put("login_type", SdkBackLoginInfo.instance.loginType)
-                put("uname", userName)
-                put("pwd", pwd)
-                SdkRequest.instance.bindAccount(requireActivity(), this, object : IRequestCallback {
-                    override fun onResponse(resultInfo: ResultInfo) {
-                        if (resultInfo.code == 1) {
-                            SdkBackLoginInfo.instance.hasBindAccount = true
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
-                            requireActivity().onBackPressed()
-                        } else {
-                            ToastUtils.toastInfo(requireActivity(), resultInfo.msg)
-                        }
-                    }
-                })
-            }
-        } catch (e: Exception) {
-            e.printStackTrace()
-        }
-
-    }
-
-    override fun onClick(v: View?) {
-        v?.apply {
-            when (tag as Int) {
-                ClickType.ACTION_RETURN -> requireActivity().onBackPressed()
-                ClickType.ACTION_CONFIRM -> callBindAccount()
-            }
-        }
-    }
-}

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

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

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

@@ -9,8 +9,8 @@ import android.text.TextUtils
 import android.widget.ImageView
 import cn.yyxx.eyuangame.core.entity.FloatFeature
 import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
-import cn.yyxx.eyuangame.core.impl.center.HybridActivity
-import cn.yyxx.eyuangame.core.impl.center.MemberActivity
+import cn.yyxx.eyuangame.core.impl.center.HybridFeatureContainer
+import cn.yyxx.eyuangame.core.impl.center.MemberCenterContainer
 import cn.yyxx.eyuangame.core.ui.floatview.FloatingBall
 import cn.yyxx.eyuangame.core.ui.floatview.FloatingBallMenu
 import cn.yyxx.eyuangame.core.utils.LocalCacheUtils
@@ -104,12 +104,10 @@ class FloatCenterService : Service() {
         }
 
         override fun onMenuItemClick(item: FloatingBallMenu.FloatingBallMenuItem, pos: Int) {
-            when (item.type) {
-                FloatFeature.FEATURE_MEMBER -> MemberActivity.start(mActivity!!)
-                FloatFeature.FEATURE_GIF -> HybridActivity.start(mActivity!!, item.url)
-                FloatFeature.FEATURE_GM -> HybridActivity.start(mActivity!!, item.url)
-                FloatFeature.FEATURE_CHARGE -> HybridActivity.start(mActivity!!, item.url)
-                FloatFeature.FEATURE_INVITE -> HybridActivity.start(mActivity!!, item.url)
+            if (item.type == FloatFeature.FEATURE_MEMBER) {
+                MemberCenterContainer(mActivity!!).show()
+            } else {
+                HybridFeatureContainer(mActivity!!, item.url).show()
             }
         }
 

+ 1 - 1
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/login/LoginFragmentPagerAdapter.kt

@@ -28,7 +28,7 @@ class LoginFragmentPagerAdapter constructor(private val titles: Array<String>, f
         }
     }
 
-    override fun getPageTitle(position: Int): CharSequence? {
+    override fun getPageTitle(position: Int): CharSequence {
         return titles[position]
     }
 

+ 7 - 7
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/share/ShareImpl.kt

@@ -22,6 +22,12 @@ class ShareImpl private constructor() {
     private var shareDialog: ShareDialog? = null
     private var fbCallback: CallbackManager? = null
 
+    companion object {
+        const val FACEBOOK_SHARE_RESULT_CODE = 1001
+        val instance: ShareImpl by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+            ShareImpl()
+        }
+    }
 
     init {
         fbCallback = CallbackManager.Factory.create()
@@ -44,7 +50,7 @@ class ShareImpl private constructor() {
                 Logger.d("facebook share onError")
                 callback.onResult(-1, "facebook share onSuccess")
             }
-        })
+        }, FACEBOOK_SHARE_RESULT_CODE)
 
         val shareLinkContent = ShareLinkContent.Builder()
             .setContentUrl(Uri.parse(line))
@@ -58,10 +64,4 @@ class ShareImpl private constructor() {
     fun onShareResult(requestCode: Int, resultCode: Int, intent: Intent?) {
         fbCallback?.onActivityResult(requestCode, resultCode, intent)
     }
-
-    companion object {
-        val instance: ShareImpl by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
-            ShareImpl()
-        }
-    }
 }

+ 2 - 1
library_core/src/main/java/cn/yyxx/eyuangame/core/internal/IEventObserver.kt

@@ -3,6 +3,7 @@ package cn.yyxx.eyuangame.core.internal
 import android.app.Activity
 import android.app.Application
 import android.content.Context
+import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 
 /**
@@ -17,7 +18,7 @@ interface IEventObserver {
 
     fun onRegister(context: Context)
 
-    fun onCharge(context: Context, amount: Int)
+    fun onCharge(context: Context, chargeInfo: SdkChargeInfo)
 
 //    fun onRoleCreate(context: Context)
 

+ 3 - 2
library_core/src/main/java/cn/yyxx/eyuangame/core/linking/Linking.kt

@@ -3,6 +3,7 @@ package cn.yyxx.eyuangame.core.linking
 import android.app.Activity
 import android.app.Application
 import android.content.Context
+import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 import cn.yyxx.eyuangame.core.internal.IEventObserver
 import cn.yyxx.eyuangame.core.linking.channel.LinkingAdjustImpl
@@ -52,9 +53,9 @@ class Linking private constructor() {
         }
     }
 
-    fun charge(context: Context, amount: Int) {
+    fun charge(context: Context, chargeInfo: SdkChargeInfo) {
         for (ob in observers) {
-            ob.onCharge(context, amount)
+            ob.onCharge(context, chargeInfo)
         }
     }
 

+ 6 - 5
library_core/src/main/java/cn/yyxx/eyuangame/core/linking/channel/LinkingAdjustImpl.kt

@@ -4,6 +4,7 @@ import android.app.Activity
 import android.app.Application
 import android.content.Context
 import android.text.TextUtils
+import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 import cn.yyxx.eyuangame.base.utils.Logger
 import cn.yyxx.eyuangame.base.utils.ParamsUtils
@@ -135,7 +136,7 @@ class LinkingAdjustImpl(val callback: OnAdjustIdRead) : IEventObserver {
         }
     }
 
-    override fun onCharge(context: Context, amount: Int) {
+    override fun onCharge(context: Context, chargeInfo: SdkChargeInfo) {
         if (!isInitSuccess) {
             Logger.e("adjust log failed , component initialize failed")
             return
@@ -150,8 +151,8 @@ class LinkingAdjustImpl(val callback: OnAdjustIdRead) : IEventObserver {
             if (!MMKVUtils.instance.eventKV.decodeBool("adjust_first_purchase")) {
                 if (JsonUtils.hasJsonKey(this, "first_purchase")) {
                     val event = AdjustEvent(this.getString("first_purchase"))
-                    event.setRevenue(amount.toDouble() / 100, "USD")
-                    event.setOrderId("order_id")
+                    event.setRevenue(chargeInfo.amount.toDouble() / 100, "USD")
+                    event.setOrderId(chargeInfo.orderId)
                     Adjust.trackEvent(event)
                     Logger.d("adjust log first charge success")
                     MMKVUtils.instance.eventKV.encode("adjust_first_purchase", true)
@@ -160,8 +161,8 @@ class LinkingAdjustImpl(val callback: OnAdjustIdRead) : IEventObserver {
 
             if (JsonUtils.hasJsonKey(this, "ecommerce_purchase")) {
                 val event = AdjustEvent(this.getString("ecommerce_purchase"))
-                event.setRevenue(amount.toDouble() / 100, "USD")
-                event.setOrderId("order_id")
+                event.setRevenue(chargeInfo.amount.toDouble() / 100, "USD")
+                event.setOrderId(chargeInfo.orderId)
                 Adjust.trackEvent(event)
                 Logger.d("adjust log charge success")
             }

+ 10 - 4
library_core/src/main/java/cn/yyxx/eyuangame/core/linking/channel/LinkingFacebookImpl.kt

@@ -3,7 +3,9 @@ package cn.yyxx.eyuangame.core.linking.channel
 import android.app.Activity
 import android.app.Application
 import android.content.Context
+import android.os.Bundle
 import android.text.TextUtils
+import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 import cn.yyxx.eyuangame.base.utils.Logger
 import cn.yyxx.eyuangame.core.entity.LoginType
@@ -38,8 +40,8 @@ class LinkingFacebookImpl : IEventObserver {
             return
         }
         //open_app
-        fbLogger.logEvent(AppEventsConstants.EVENT_NAME_ADDED_PAYMENT_INFO)
         Logger.d("facebook log open app success")
+        fbLogger.logEvent("open_app")
         MMKVUtils.instance.eventKV.encode("facebook_activities", true)
         isInitSuccess = true
     }
@@ -90,7 +92,7 @@ class LinkingFacebookImpl : IEventObserver {
         Logger.d("facebook log sign up success")
     }
 
-    override fun onCharge(context: Context, amount: Int) {
+    override fun onCharge(context: Context, chargeInfo: SdkChargeInfo) {
         if (!isInitSuccess) {
             Logger.e("facebook log failed , component initialize failed")
             return
@@ -100,14 +102,17 @@ class LinkingFacebookImpl : IEventObserver {
             Logger.e("facebook log failed , user is null")
             return
         }
+        val params = Bundle()
+        params.putDouble("price", chargeInfo.amount.toDouble() / 100)
+        params.putString("order", chargeInfo.orderId)
 
         if (!MMKVUtils.instance.eventKV.decodeBool("facebook_first_purchase")) {
-            fbLogger.logEvent("first_purchase", amount.toDouble() / 100)
+            fbLogger.logEvent("first_purchase", params)
             Logger.d("facebook log first charge success")
             MMKVUtils.instance.eventKV.encode("facebook_first_purchase", true)
         }
 
-        fbLogger.logPurchase(BigDecimal.valueOf(amount.toDouble() / 100), Currency.getInstance("USD"))
+        fbLogger.logPurchase(BigDecimal.valueOf(chargeInfo.amount.toDouble() / 100), Currency.getInstance("USD"), params)
         Logger.d("facebook log charge success")
     }
 
@@ -147,6 +152,7 @@ class LinkingFacebookImpl : IEventObserver {
                 "fb_mobile_initiated_checkout" -> AppEventsConstants.EVENT_NAME_INITIATED_CHECKOUT
                 "fb_mobile_add_to_cart" -> AppEventsConstants.EVENT_NAME_ADDED_TO_CART
                 "fb_mobile_add_to_wishlist" -> AppEventsConstants.EVENT_NAME_ADDED_TO_WISHLIST
+                "fb_mobile_add_payment_info" -> AppEventsConstants.EVENT_NAME_ADDED_PAYMENT_INFO
                 "fb_mobile_achievement_unlocked" -> AppEventsConstants.EVENT_NAME_UNLOCKED_ACHIEVEMENT
                 "fb_mobile_search" -> AppEventsConstants.EVENT_NAME_SEARCHED
                 "fb_mobile_rate" -> AppEventsConstants.EVENT_NAME_RATED

+ 6 - 3
library_core/src/main/java/cn/yyxx/eyuangame/core/linking/channel/LinkingFirebaseImpl.kt

@@ -4,6 +4,7 @@ import android.app.Activity
 import android.app.Application
 import android.content.Context
 import android.text.TextUtils
+import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 import cn.yyxx.eyuangame.base.utils.Logger
 import cn.yyxx.eyuangame.core.entity.LoginType
@@ -80,7 +81,7 @@ class LinkingFirebaseImpl : IEventObserver {
         Logger.d("firebase log sign up success")
     }
 
-    override fun onCharge(context: Context, amount: Int) {
+    override fun onCharge(context: Context, chargeInfo: SdkChargeInfo) {
         if (!isInitSuccess) {
             Logger.e("firebase log failed , component initialize failed")
             return
@@ -93,14 +94,16 @@ class LinkingFirebaseImpl : IEventObserver {
 
         if (!MMKVUtils.instance.eventKV.decodeBool("firebase_first_purchase")) {
             Firebase.analytics.logEvent("first_purchase") {
-                param(FirebaseAnalytics.Param.PRICE, (amount.toDouble() / 100).toString())
+                param(FirebaseAnalytics.Param.PRICE, (chargeInfo.amount.toDouble() / 100).toString())
+                param("order_id", chargeInfo.orderId)
             }
             Logger.d("firebase log first charge success")
             MMKVUtils.instance.eventKV.encode("firebase_first_purchase", true)
         }
 
         Firebase.analytics.logEvent("ecommerce_purchase") {
-            param(FirebaseAnalytics.Param.PRICE, (amount.toDouble() / 100).toString())
+            param(FirebaseAnalytics.Param.PRICE, (chargeInfo.amount.toDouble() / 100).toString())
+            param("order_id", chargeInfo.orderId)
         }
         Logger.d("firebase log charge success")
 

+ 14 - 21
library_core/src/main/res/layout-land/yyxx_hybrid.xml

@@ -1,30 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:id="@+id/yyxx_webview_container"
+    android:layout_height="300dp"
     android:layout_gravity="center"
+    android:layout_margin="20dp"
     android:background="@color/yyxx_transparent">
 
-    <FrameLayout
-        android:id="@+id/yyxx_webview_container"
+    <WebView
+        android:id="@+id/yyxx_webview"
         android:layout_width="match_parent"
-        android:layout_height="300dp"
-        android:layout_margin="50dp"
-        android:background="@color/yyxx_transparent">
-
-        <WebView
-            android:id="@+id/yyxx_webview"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-
-        <ImageView
-            android:id="@+id/yyxx_iv_close"
-            android:layout_width="15dp"
-            android:layout_height="15dp"
-            android:layout_gravity="top|right"
-            android:layout_marginTop="10dp"
-            android:layout_marginRight="10dp"
-            android:src="@drawable/yyxx_close_img" />
-    </FrameLayout>
+        android:layout_height="match_parent" />
 
+    <ImageView
+        android:id="@+id/yyxx_iv_close"
+        android:layout_width="15dp"
+        android:layout_height="15dp"
+        android:layout_gravity="top|right"
+        android:layout_marginTop="10dp"
+        android:layout_marginRight="10dp"
+        android:src="@drawable/yyxx_close_img" />
 </FrameLayout>

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

@@ -9,7 +9,7 @@
 
     <LinearLayout
         android:id="@+id/yyxx_ll_top"
-        android:layout_width="250dp"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:gravity="center_horizontal"
         android:orientation="horizontal"

+ 22 - 20
library_core/src/main/res/layout/yyxx_hybrid.xml

@@ -1,30 +1,32 @@
 <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:id="@+id/yyxx_webview_container"
     android:layout_gravity="center"
+    android:layout_height="320dp"
+    android:padding="5dp"
     android:background="@color/yyxx_transparent">
 
-    <FrameLayout
-        android:id="@+id/yyxx_webview_container"
-        android:layout_width="match_parent"
-        android:layout_height="320dp"
-        android:layout_margin="20dp"
-        android:background="@color/yyxx_transparent">
+    <!--    <FrameLayout-->
+    <!--        android:id="@+id/yyxx_webview_container"-->
+    <!--        android:layout_width="match_parent"-->
+    <!--        android:layout_height="320dp"-->
+    <!--        android:layout_margin="20dp"-->
+    <!--        android:background="@color/yyxx_transparent">-->
 
-        <WebView
-            android:id="@+id/yyxx_webview"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+    <WebView
+        android:id="@+id/yyxx_webview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
 
-        <ImageView
-            android:id="@+id/yyxx_iv_close"
-            android:layout_width="15dp"
-            android:layout_height="15dp"
-            android:layout_gravity="top|right"
-            android:layout_marginTop="10dp"
-            android:layout_marginRight="10dp"
-            android:src="@drawable/yyxx_close_img" />
-    </FrameLayout>
+    <ImageView
+        android:id="@+id/yyxx_iv_close"
+        android:layout_width="15dp"
+        android:layout_height="15dp"
+        android:layout_gravity="top|right"
+        android:layout_marginTop="10dp"
+        android:layout_marginRight="10dp"
+        android:src="@drawable/yyxx_close_img" />
+    <!--    </FrameLayout>-->
 
 </FrameLayout>

+ 17 - 32
library_core/src/main/res/layout/yyxx_member_bind_account.xml

@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_title_container"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="40dp"
         android:background="@drawable/yyxx_white_panel_title_bg"
         app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
@@ -35,51 +36,39 @@
             app:layout_constraintTop_toTopOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <LinearLayout
+        android:layout_height="200dp"
         android:id="@+id/yyxx_content_container"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:orientation="vertical"
         android:background="@drawable/yyxx_white70_panel_content_bg"
-        android:padding="20dp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/yyxx_title_container">
+        android:padding="20dp">
 
         <cn.yyxx.eyuangame.core.ui.EventEditText
             android:id="@+id/yyxx_eet_account"
             android:layout_width="match_parent"
             android:layout_height="35dp"
-            android:background="@drawable/yyxx_et_frame_selector_bg"
-            app:layout_constraintBottom_toTopOf="@+id/yyxx_eet_pwd"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
+            android:background="@drawable/yyxx_et_frame_selector_bg" />
 
         <cn.yyxx.eyuangame.core.ui.EventEditText
             android:id="@+id/yyxx_eet_pwd"
             android:layout_width="match_parent"
             android:layout_height="35dp"
             android:layout_marginTop="5dp"
-            android:background="@drawable/yyxx_et_frame_selector_bg"
-            app:layout_constraintBottom_toTopOf="@id/yyxx_tv_tips"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_account" />
+            android:background="@drawable/yyxx_et_frame_selector_bg" />
 
 
         <TextView
             android:id="@+id/yyxx_tv_tips"
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
+            android:gravity="center"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
             android:text="@string/yyxx_tv_bind_account_tips"
             android:textColor="@color/yyxx_color_red"
             android:textSize="10sp"
-            android:textStyle="bold"
-            app:layout_constraintBottom_toTopOf="@id/yyxx_btn_confirm"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_pwd" />
+            android:textStyle="bold" />
 
         <Button
             android:id="@+id/yyxx_btn_confirm"
@@ -90,10 +79,6 @@
             android:background="@drawable/yyxx_btn_green_blue_bg"
             android:text="@string/yyxx_tv_confirm"
             android:textColor="@color/yyxx_color_white"
-            android:textSize="16sp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/yyxx_tv_tips" />
-    </androidx.constraintlayout.widget.ConstraintLayout>
-</androidx.constraintlayout.widget.ConstraintLayout>
+            android:textSize="16sp" />
+    </LinearLayout>
+</LinearLayout>

+ 5 - 4
library_core/src/main/res/layout/yyxx_member_bind_phone.xml

@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
+    android:orientation="vertical"
     android:layout_height="wrap_content">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_title_container"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="40dp"
         android:background="@drawable/yyxx_white_panel_title_bg"
         app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
@@ -38,7 +39,7 @@
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_content_container"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="200dp"
         android:background="@drawable/yyxx_white70_panel_content_bg"
         android:padding="20dp"
         app:layout_constraintEnd_toEndOf="parent"
@@ -237,4 +238,4 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/yyxx_ll_group2" />
     </androidx.constraintlayout.widget.ConstraintLayout>
-</androidx.constraintlayout.widget.ConstraintLayout>
+</LinearLayout>

+ 9 - 15
library_core/src/main/res/layout/yyxx_member_main.xml → library_core/src/main/res/layout/yyxx_member_center.xml

@@ -1,18 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_title_container"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="40dp"
-        android:background="@drawable/yyxx_white_panel_title_bg"
-        app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
+        android:background="@drawable/yyxx_white_panel_title_bg">
 
         <ImageView
             android:id="@+id/yyxx_iv_return"
@@ -35,15 +32,11 @@
             app:layout_constraintTop_toTopOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_content_container"
         android:layout_width="match_parent"
         android:layout_height="200dp"
-        android:background="@drawable/yyxx_white70_panel_content_bg"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/yyxx_title_container">
+        android:background="@drawable/yyxx_white70_panel_content_bg">
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/yyxx_cl_bind_account"
@@ -73,8 +66,9 @@
 
             <TextView
                 android:id="@+id/yyxx_tv_bind_account_tips"
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:gravity="center"
                 android:text="@string/yyxx_login_type_guest"
                 android:textColor="@color/yyxx_color_black"
                 android:textSize="10sp"
@@ -179,4 +173,4 @@
         </androidx.constraintlayout.widget.ConstraintLayout>
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+</LinearLayout>

+ 12 - 26
library_core/src/main/res/layout/yyxx_member_modify_pwd.xml

@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
+    android:orientation="vertical"
     android:layout_height="wrap_content">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_title_container"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="40dp"
         android:background="@drawable/yyxx_white_panel_title_bg"
         app:layout_constraintBottom_toTopOf="@id/yyxx_content_container"
@@ -35,36 +36,27 @@
             app:layout_constraintTop_toTopOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <LinearLayout
+        android:layout_height="200dp"
         android:id="@+id/yyxx_content_container"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:gravity="center"
         android:background="@drawable/yyxx_white70_panel_content_bg"
         android:padding="20dp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/yyxx_title_container">
+        android:orientation="vertical">
 
         <cn.yyxx.eyuangame.core.ui.EventEditText
             android:id="@+id/yyxx_eet_old_pwd"
             android:layout_width="match_parent"
             android:layout_height="35dp"
-            android:background="@drawable/yyxx_et_frame_selector_bg"
-            app:layout_constraintBottom_toTopOf="@+id/yyxx_eet_new_pwd"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
+            android:background="@drawable/yyxx_et_frame_selector_bg" />
 
         <cn.yyxx.eyuangame.core.ui.EventEditText
             android:id="@+id/yyxx_eet_new_pwd"
             android:layout_width="match_parent"
             android:layout_height="35dp"
             android:layout_marginTop="10dp"
-            android:background="@drawable/yyxx_et_frame_selector_bg"
-            app:layout_constraintBottom_toTopOf="@id/yyxx_btn_confirm"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_old_pwd" />
+            android:background="@drawable/yyxx_et_frame_selector_bg" />
 
         <Button
             android:id="@+id/yyxx_btn_confirm"
@@ -75,12 +67,6 @@
             android:background="@drawable/yyxx_btn_green_blue_bg"
             android:text="@string/yyxx_tv_confirm"
             android:textColor="@color/yyxx_color_white"
-            android:textSize="16sp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/yyxx_eet_new_pwd" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
+            android:textSize="16sp" />
+    </LinearLayout>
+</LinearLayout>

+ 3 - 13
library_hk_language/build.gradle

@@ -4,12 +4,12 @@ plugins {
 }
 
 android {
-    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    compileSdk rootProject.ext.android.compileSdk
     buildToolsVersion rootProject.ext.android.buildToolsVersion
 
     defaultConfig {
-        minSdkVersion rootProject.ext.android.minSdkVersion
-        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        minSdk rootProject.ext.android.minSdk
+        targetSdk rootProject.ext.android.targetSdk
 
         ndk {
             // 设置支持的SO库架构
@@ -33,16 +33,6 @@ android {
         abortOnError false
     }
 
-    repositories {
-        flatDir {
-            dirs '../libs'
-        }
-    }
-
-    dexOptions {
-        preDexLibraries = false
-    }
-
     compileOptions {
         kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyaungame.language"]
     }

+ 3 - 13
library_vn_language/build.gradle

@@ -4,12 +4,12 @@ plugins {
 }
 
 android {
-    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    compileSdk rootProject.ext.android.compileSdk
     buildToolsVersion rootProject.ext.android.buildToolsVersion
 
     defaultConfig {
-        minSdkVersion rootProject.ext.android.minSdkVersion
-        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        minSdk rootProject.ext.android.minSdk
+        targetSdk rootProject.ext.android.targetSdk
 
         ndk {
             // 设置支持的SO库架构
@@ -33,16 +33,6 @@ android {
         abortOnError false
     }
 
-    repositories {
-        flatDir {
-            dirs '../libs'
-        }
-    }
-
-    dexOptions {
-        preDexLibraries = false
-    }
-
     compileOptions {
         kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyaungame.language"]
     }

+ 9 - 0
settings.gradle

@@ -1,3 +1,12 @@
+dependencyResolutionManagement {
+    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+    repositories {
+        google()
+        mavenCentral()
+        jcenter()
+    }
+}
+
 rootProject.name = "EYuanGameSdk-KTX"
 include ':demo'
 include ':library_base'