Browse Source

v1.0.1开发:越南版本UI适配

#Suyghur 3 years ago
parent
commit
f055f0f268
48 changed files with 744 additions and 129 deletions
  1. 1 0
      config.gradle
  2. 1 0
      demo/build.gradle
  3. 4 4
      demo/src/main/AndroidManifest.xml
  4. 0 52
      demo/src/main/assets/test.html
  5. 3 1
      demo/src/main/assets/yyxx_game/yyxx_cfg.properties
  6. 10 0
      library_base/build.gradle
  7. 4 4
      library_base/src/main/java/cn/yyxx/eyuangame/base/EYuanGame.kt
  8. 32 3
      library_base/src/main/java/cn/yyxx/eyuangame/base/EYuanGameApplication.kt
  9. 3 3
      library_base/src/main/java/cn/yyxx/eyuangame/base/SdkBridgeManager.kt
  10. 2 0
      library_base/src/main/java/cn/yyxx/eyuangame/base/utils/Logger.kt
  11. 12 0
      library_base/src/main/java/cn/yyxx/eyuangame/base/utils/ParamsUtils.kt
  12. 18 0
      library_core/build.gradle
  13. 3 0
      library_core/src/main/AndroidManifest.xml
  14. 2 2
      library_core/src/main/java/cn/yyxx/eyuangame/core/SdkBridge.kt
  15. 18 11
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/SdkBridgeImpl.kt
  16. 0 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/center/HybridActivity.kt
  17. 21 4
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/iab/ChargeImpl.kt
  18. 1 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/login/LoginActivity.kt
  19. 4 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/login/fragment/LauncherFragment.kt
  20. 4 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/impl/login/fragment/RegisterFragment.kt
  21. 34 5
      library_core/src/main/java/cn/yyxx/eyuangame/core/network/Host.kt
  22. 1 0
      library_core/src/main/java/cn/yyxx/eyuangame/core/network/VolleyRequest.kt
  23. 1 1
      library_core/src/main/java/cn/yyxx/eyuangame/core/ui/dialog/AgreementDialog.kt
  24. 22 4
      library_core/src/main/java/cn/yyxx/eyuangame/core/ui/dialog/ChooseLoginDialog.kt
  25. 8 8
      library_core/src/main/java/cn/yyxx/eyuangame/core/ui/floatview/FloatingBall.kt
  26. 2 3
      library_core/src/main/java/cn/yyxx/eyuangame/core/ui/floatview/FloatingBallMenu.kt
  27. BIN
      library_core/src/main/res/drawable-xhdpi/yyxx_account_login_vn_img.png
  28. BIN
      library_core/src/main/res/drawable-xhdpi/yyxx_guest_login_vn_img.png
  29. 6 5
      library_core/src/main/res/layout/yyxx_auto_login_dialog.xml
  30. 4 4
      library_core/src/main/res/layout/yyxx_choose_login_dialog.xml
  31. 4 2
      library_core/src/main/res/layout/yyxx_floating_ball_item.xml
  32. 3 0
      library_core/src/main/res/layout/yyxx_floating_ball_menu.xml
  33. 1 1
      library_core/src/main/res/layout/yyxx_loading_dialog.xml
  34. 4 4
      library_core/src/main/res/layout/yyxx_login.xml
  35. 1 1
      library_core/src/main/res/layout/yyxx_login_launcher.xml
  36. 1 1
      library_core/src/main/res/layout/yyxx_login_register.xml
  37. 3 3
      library_core/src/main/res/layout/yyxx_member_main.xml
  38. 1 0
      library_hk_language/.gitignore
  39. 62 0
      library_hk_language/build.gradle
  40. 146 0
      library_hk_language/proguard-rules.pro
  41. 5 0
      library_hk_language/src/main/AndroidManifest.xml
  42. 1 0
      library_hk_language/src/main/res/values/yyxx_strings.xml
  43. 1 0
      library_vn_language/.gitignore
  44. 62 0
      library_vn_language/build.gradle
  45. 146 0
      library_vn_language/proguard-rules.pro
  46. 5 0
      library_vn_language/src/main/AndroidManifest.xml
  47. 75 0
      library_vn_language/src/main/res/values/yyxx_strings.xml
  48. 2 0
      settings.gradle

+ 1 - 0
config.gradle

@@ -4,6 +4,7 @@ ext {
             remoteLib    : false,
             minifyEnabled: true,
             publish      : false,
+            language: 2
     ]
 
     android = [

+ 1 - 0
demo/build.gradle

@@ -13,6 +13,7 @@ android {
 
     defaultConfig {
         applicationId 'com.shzd.eyuangame'
+//        applicationId 'com.ftsx.eyuangame'
         minSdkVersion rootProject.ext.android.minSdkVersion
         targetSdkVersion rootProject.ext.android.targetSdkVersion
         versionCode 1

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

@@ -13,7 +13,7 @@
         android:theme="@style/AppTheme">
 
         <activity
-            android:name="com.eyuangame.demo.WelcomeActivity"
+            android:name=".WelcomeActivity"
             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
             android:launchMode="standard"
             android:screenOrientation="portrait"
@@ -25,7 +25,7 @@
         </activity>
 
         <activity
-            android:name="com.eyuangame.demo.DemoActivity"
+            android:name=".DemoActivity"
             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
             android:exported="true"
             android:launchMode="singleTask"
@@ -37,11 +37,11 @@
         </activity>
 
         <activity
-            android:name="com.eyuangame.demo.EnvActivity"
+            android:name=".EnvActivity"
             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
             android:exported="true"
             android:launchMode="singleTask"
-            android:screenOrientation="sensorLandscape">
+            android:screenOrientation="behind">
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />

+ 0 - 52
demo/src/main/assets/test.html

@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-
-    <!-- Compiled and minified CSS -->
-    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/css/materialize.min.css">
-    <!-- Compiled and minified JavaScript -->
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/js/materialize.min.js"></script>
-    <title>Test</title>
-</head>
-
-<body>
-
-    <div class="container">
-        <!-- 页面内容放在这里 -->
-        <div class="input-field col s6">
-            <input placeholder="输入方法名" id="text1" type="text" class="validate">
-            <input placeholder="输入数据(json字符串)" id="text2" type="text" class="validate">
-        </div>
-        <div class="section">
-            <a class="waves-effect waves-light btn" onclick="callAndroid(false);">js调用Android方法(无返回值)</a>
-        </div>
-        <div class="section">
-            <a class="waves-effect waves-light btn" onclick="callAndroid(true);">js调用Android方法(有返回值)</a>
-        </div>
-
-    </div>
-
-</body>
-<script>
-
-    //js调用Android方法
-    function callAndroid(hasCallback) {
-        var method = document.getElementById("text1").value;
-        var data = document.getElementById("text2").value;
-        if (hasCallback) {
-            //有返回值调用jsCallback()
-            var callback = eyuangame.jsCallback(method, data)
-            alert(callback)
-        } else {
-            //无返回值调用jsInvoke()
-            eyuangame.jsInvoke(method, data)
-        }
-    }
-
-</script>
-
-</html>

+ 3 - 1
demo/src/main/assets/yyxx_game/yyxx_cfg.properties

@@ -1,5 +1,5 @@
 #出包版本
-YYXX_GCP_CODE=G010101
+YYXX_GCP_CODE=G010199
 #分包标识
 YYXX_GAME_CODE=100001
 # 事件打点应用ID
@@ -12,3 +12,5 @@ YYXX_GOOGLE_CLIENT_ID=70429070957-7clr9u565jrjgbgg474ksg8q2esq2okj.apps.googleus
 YYXX_FACEBOOK_ID=229604925839347
 #debug模式(cp出正式包请关闭)
 YYXX_OWN_DEBUG=true
+#地区环境
+YYXX_DO_MAIN_ENV=2

+ 10 - 0
library_base/build.gradle

@@ -46,12 +46,22 @@ android {
     compileOptions {
         kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyaungame.base"]
     }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    kotlinOptions {
+        jvmTarget = "1.8"
+    }
 }
 
 dependencies {
     api files('../libs/yyxx_support_1.0.1.jar')
     implementation 'androidx.core:core-ktx:1.7.0'
     implementation 'io.github.suyghur.dolin:zap:1.0.0'
+//    implementation 'androidx.appcompat:appcompat:1.4.0'
 }
 
 apply from: 'buildJar.gradle'

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

@@ -32,9 +32,9 @@ class EYuanGame private constructor() {
 
     private var doSdkInit = false
 
-    private fun getSdkBridgeManager(context: Context): Any? {
+    private fun getSdkBridgeManager(): Any? {
         if (mSdkBridge == null) {
-            mSdkBridge = SdkBridgeManager.initSdkBridgeManager(context)
+            mSdkBridge = SdkBridgeManager.initSdkBridgeManager()
         }
         return mSdkBridge
     }
@@ -50,7 +50,7 @@ class EYuanGame private constructor() {
             return
         }
         if (mSdkBridge == null) {
-            mSdkBridge = getSdkBridgeManager(application)
+            mSdkBridge = getSdkBridgeManager()
         }
         SdkBridgeManager.call(
             Function.ATTACH_BASE_CONTEXT,
@@ -81,7 +81,7 @@ class EYuanGame private constructor() {
             return
         }
         if (mSdkBridge == null) {
-            mSdkBridge = getSdkBridgeManager(application)
+            mSdkBridge = getSdkBridgeManager()
         }
         SdkBridgeManager.call(
             Function.INIT_APPLICATION,

+ 32 - 3
library_base/src/main/java/cn/yyxx/eyuangame/base/EYuanGameApplication.kt

@@ -1,8 +1,12 @@
 package cn.yyxx.eyuangame.base
 
+import android.annotation.TargetApi
 import android.app.Application
 import android.content.Context
+import android.os.Build
+import android.os.LocaleList
 import cn.yyxx.support.multidex.MultiDex
+import java.util.*
 
 /**
  * @author #Suyghur.
@@ -11,13 +15,38 @@ import cn.yyxx.support.multidex.MultiDex
 open class EYuanGameApplication : Application() {
 
     override fun attachBaseContext(base: Context) {
-        super.attachBaseContext(base)
-        MultiDex.install(base)
-        EYuanGame.getInstance().attachBaseContext(this, base)
+        val context = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            updateResources(base)
+        } else {
+            base
+        }
+        super.attachBaseContext(context)
+//        MultiDex.install(context)
+        EYuanGame.getInstance().attachBaseContext(this, context)
     }
 
     override fun onCreate() {
         super.onCreate()
         EYuanGame.getInstance().initApplication(this)
     }
+
+    @TargetApi(Build.VERSION_CODES.N)
+    private fun updateResources(context: Context): Context {
+        val resources = context.resources
+        val locale = Locale.forLanguageTag("vi-VN")
+        val configuration = resources.configuration
+        configuration.setLocale(locale)
+        configuration.setLocales(LocaleList(locale))
+        return context.createConfigurationContext(configuration)
+    }
+
+//    override fun createConfigurationContext(overrideConfiguration: Configuration): Context {
+//        val locale = Locale("vi")
+//        Locale.setDefault(locale)
+////        val config = resources.configuration
+////        config.setLocale(locale)
+////        resources.updateConfiguration(config)
+//        overrideConfiguration.setLocale(locale)
+//        return super.createConfigurationContext(overrideConfiguration)
+//    }
 }

+ 3 - 3
library_base/src/main/java/cn/yyxx/eyuangame/base/SdkBridgeManager.kt

@@ -12,7 +12,7 @@ object SdkBridgeManager {
     var sdkBridge: Any? = null
     var clzBridge: Class<*>? = null
 
-    fun initSdkBridgeManager(context: Context?): Any? {
+    fun initSdkBridgeManager(): Any? {
         if (sdkBridge != null) {
             return sdkBridge
         }
@@ -20,8 +20,8 @@ object SdkBridgeManager {
         try {
             clzBridge = Class.forName("cn.yyxx.eyuangame.core.SdkBridge")
             //获取构造函数的构造器
-            val constructor = clzBridge!!.getDeclaredConstructor(Context::class.java)
-            sdkBridge = constructor.newInstance(context)
+            val constructor = clzBridge!!.getDeclaredConstructor()
+            sdkBridge = constructor.newInstance()
         } catch (e: Exception) {
             e.printStackTrace()
         }

+ 2 - 0
library_base/src/main/java/cn/yyxx/eyuangame/base/utils/Logger.kt

@@ -2,6 +2,7 @@ package cn.yyxx.eyuangame.base.utils
 
 import android.app.Application
 import cn.yyxx.support.hawkeye.LogUtils
+import cn.yyxx.support.hawkeye.OwnDebugUtils
 import com.dolin.zap.Zap
 import com.dolin.zap.entity.Config
 import com.dolin.zap.entity.Level
@@ -17,6 +18,7 @@ object Logger {
     private var hasZapInit = false
 
     fun initZap(application: Application) {
+        LogUtils.DEBUG = OwnDebugUtils.isOwnDebug(application, "yyxx_cfg.properties", "yyxx_game", "YYXX_OWN_DEBUG")
         val level = if (LogUtils.DEBUG) {
             Level.DEBUG
         } else {

+ 12 - 0
library_base/src/main/java/cn/yyxx/eyuangame/base/utils/ParamsUtils.kt

@@ -16,6 +16,7 @@ object ParamsUtils {
     private const val YYXX_ADJSUT_APP_ID = "YYXX_ADJUST_APP_ID"
     private const val YYXX_GOOGLE_APP_ID = "YYXX_GOOGLE_APP_ID"
     private const val YYXX_GOOGLE_CLIENT_ID = "YYXX_GOOGLE_CLIENT_ID"
+    private const val YYXX_DO_MAIN_ENV = "YYXX_DO_MAIN_ENV"
 
     fun getGcpCode(context: Context): String {
         try {
@@ -78,4 +79,15 @@ object ParamsUtils {
         return ""
     }
 
+    fun getDoMainEnv(context: Context): Int {
+        try {
+            val env = PropertiesUtils.getValue4Properties(context, CONFIG_FILE, "yyxx_game", YYXX_DO_MAIN_ENV)
+            if (!TextUtils.isEmpty(env)) {
+                return env.toInt()
+            }
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return 1
+    }
 }

+ 18 - 0
library_core/build.gradle

@@ -54,6 +54,15 @@ android {
         kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyuangame.core"]
     }
 
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    kotlinOptions {
+        jvmTarget = "1.8"
+    }
+
     externalNativeBuild {
         cmake {
             path "CMakeLists.txt"
@@ -95,6 +104,15 @@ dependencies {
     } else {
         api project(':library_base')
     }
+
+    switch (rootProject.ext.module.language){
+        case 1:
+            api project(':library_hk_language')
+            break
+        case 2:
+            api project(':library_vn_language')
+            break
+    }
 }
 
 apply from: 'publish.gradle'

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

@@ -13,11 +13,14 @@
     <uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR" />
     <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
 
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
+
     <queries>
         <package android:name="com.facebook.katana" />
     </queries>
 
     <application
+        android:configChanges="locale"
         android:allowBackup="true"
         android:allowNativeHeapPointerTagging="false"
         android:supportsRtl="true"

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

@@ -15,13 +15,13 @@ import cn.yyxx.eyuangame.core.impl.SdkBridgeImpl
  * @author #Suyghur.
  * Created on 2021/06/09
  */
-class SdkBridge constructor(context: Context) {
+class SdkBridge constructor() {
 
     private var mImpl: SdkBridgeImpl? = null
 
     init {
         if (mImpl == null) {
-            mImpl = SdkBridgeImpl(context)
+            mImpl = SdkBridgeImpl()
         }
     }
 

+ 18 - 11
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/SdkBridgeImpl.kt

@@ -4,7 +4,9 @@ import android.app.Activity
 import android.app.Application
 import android.content.Context
 import android.content.Intent
+import android.os.Build
 import android.text.TextUtils
+import androidx.annotation.RequiresApi
 import cn.yyxx.eyuangame.base.entity.SdkChargeInfo
 import cn.yyxx.eyuangame.base.entity.SdkEvent
 import cn.yyxx.eyuangame.base.entity.SdkRoleInfo
@@ -33,8 +35,6 @@ import cn.yyxx.support.DensityUtils
 import cn.yyxx.support.ResUtils
 import cn.yyxx.support.device.DeviceInfoUtils
 import cn.yyxx.support.gaid.GAIDUtils
-import cn.yyxx.support.hawkeye.LogUtils
-import cn.yyxx.support.hawkeye.OwnDebugUtils
 import com.google.firebase.crashlytics.FirebaseCrashlytics
 import java.util.concurrent.atomic.AtomicInteger
 
@@ -43,7 +43,7 @@ import java.util.concurrent.atomic.AtomicInteger
  * @author #Suyghur.
  * Created on 2021/06/16
  */
-class SdkBridgeImpl(context: Context) {
+class SdkBridgeImpl {
 
     private var hasReadGaid = false
     private var roleInfo: SdkRoleInfo? = null
@@ -68,11 +68,6 @@ class SdkBridgeImpl(context: Context) {
     private var initLoadingDialog: ScaleLoadingDialog? = null
 
 
-    init {
-        Host.initHostModel(context)
-        LogUtils.DEBUG = OwnDebugUtils.isOwnDebug(context, "yyxx_cfg.properties", "yyxx_game", "YYXX_OWN_DEBUG")
-    }
-
     fun attachBaseContext(application: Application, context: Context) {
         Logger.initZap(application)
         SdkDrive.instance.initSdkDrive(application)
@@ -97,9 +92,11 @@ class SdkBridgeImpl(context: Context) {
         }
     }
 
+    @RequiresApi(Build.VERSION_CODES.N)
     fun initApplication(application: Application) {
         Logger.i("EYuanGameSdk initApplication ...")
         MMKVUtils.instance.init(application)
+        Host.initHostModel(application)
         Linking.instance.initialize(application, object : Linking.OnTraceIdRead {
             override fun onAdjustIdRead(id: String) {
                 Logger.d("onAdjustIdRead : $id")
@@ -111,6 +108,7 @@ class SdkBridgeImpl(context: Context) {
 
     fun initialize(activity: Activity, isLandscape: Boolean, callback: ICallback, initCallback: IInitialize) {
         Logger.i("EYuanGameSdk initialize ...")
+
         isLand = isLandscape
         if (TextUtils.isEmpty(ParamsUtils.getGcpCode(activity))) {
             Logger.e("初始化失败,参数异常,请检查yyxx_cfg.properties中YYXX_GCP_CODE的值")
@@ -319,10 +317,19 @@ class SdkBridgeImpl(context: Context) {
         if (isIab) {
             ChargeImpl.instance.charge(activity, innerChargeInfo, object : IImplCallback {
                 override fun onResult(code: Int, result: String) {
-                    if (code == 0) {
-                        Linking.instance.charge(activity, innerChargeInfo.amount)
+                    when (code) {
+                        0 -> {
+                            Linking.instance.charge(activity, innerChargeInfo.amount)
+                            callback.onResult(0, result)
+                        }
+                        1 -> {
+                            //H5支付
+                            HybridActivity.start(activity, initBean.floatCfg.chargeCfg.url)
+                        }
+                        else -> {
+                            callback.onResult(-1, result)
+                        }
                     }
-                    callback.onResult(code, result)
                 }
             })
         } else {

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

@@ -106,7 +106,6 @@ class HybridActivity : Activity(), View.OnClickListener {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-
         initView()
         initWebView()
     }

+ 21 - 4
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/iab/ChargeImpl.kt

@@ -149,11 +149,28 @@ class ChargeImpl : InAppBilling() {
                     try {
                         val jsonObject = JSONObject(resultInfo.data)
                         chargeInfo.orderId = jsonObject.getString("order_id")
+                        val payment = jsonObject.getInt("payment")
                         Logger.d("order_id ---> ${chargeInfo.orderId}")
-                        //获取订单号成功,初始化IAB收银台客户端
-                        Logger.d("获取订单号成功,初始化IAB收银台客户端")
-                        initializeBillingClient(activity)
-                        connectGooglePlay(activity, false)
+                        Logger.d("payment ---> $payment")
+
+                        when (payment) {
+                            1 -> {
+                                // 获取订单号成功,初始化IAB收银台客户端
+                                Logger.d("获取订单号成功,初始化IAB收银台客户端")
+                                initializeBillingClient(activity)
+                                connectGooglePlay(activity, false)
+                            }
+                            3 -> {
+                                // 切换第三方支付
+                                dismissDialog()
+                                implCallback.onResult(1, "切换第三方支付")
+                            }
+                            else -> {
+                                dismissDialog()
+                                ToastUtils.toastInfo(activity, ResUtils.getResString(activity, "yyxx_charge_tv_error"))
+                                implCallback.onResult(-1, "获取订单异常")
+                            }
+                        }
                     } catch (e: JSONException) {
                         e.printStackTrace()
                         dismissDialog()

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

@@ -230,7 +230,7 @@ class LoginActivity : FragmentActivity(), View.OnClickListener {
         if (SdkBridgeImpl.isLand) {
             val requestedTabMinWidth = TabLayout::class.java.getDeclaredField("requestedTabMinWidth")
             requestedTabMinWidth.isAccessible = true
-            requestedTabMinWidth.set(tabLayout, DensityUtils.dip2px(this, 160f))
+            requestedTabMinWidth.set(tabLayout, DensityUtils.dip2px(this, 200f))
         }
 
         viewPager = findViewById(ResUtils.getResId(this, "yyxx_vp", "id"))

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

@@ -328,7 +328,6 @@ class LauncherFragment : Fragment(), View.OnClickListener {
             agreementDialog = null
         }
         agreementDialog = AgreementDialog(requireContext(), SdkBridgeImpl.initBean.privacyCfg.url, SdkBridgeImpl.isLand)
-//        agreementDialog = AgreementDialog(requireContext(), "http://www.eyuangame.com/agreement_user.html", SdkBridgeImpl.isLand)
         agreementDialog?.apply {
             loginImpl.hideLoginView()
             ivReturn.setOnClickListener {
@@ -392,6 +391,10 @@ class LauncherFragment : Fragment(), View.OnClickListener {
             when (tag as Int) {
                 ClickType.ACTION_FORGET -> showForgetPwdDialog()
                 ClickType.ACTION_LAUNCHER -> {
+                    if (!check) {
+                        ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tv_check_agreement"))
+                        return
+                    }
                     val userName = eetAccount.editText.text.trim().toString()
                     val pwd = eetPwd.editText.text.trim().toString()
                     if (!EditTextUtils.filterAccount(userName)) {

+ 4 - 0
library_core/src/main/java/cn/yyxx/eyuangame/core/impl/login/fragment/RegisterFragment.kt

@@ -164,6 +164,10 @@ class RegisterFragment : Fragment(), View.OnClickListener {
                 ClickType.ACTION_CLICK_CHECK -> changeCheck()
                 ClickType.ACTION_CLICK_AGREEMENT -> showAgreementDialog()
                 ClickType.ACTION_REGISTER -> {
+                    if (!check) {
+                        ToastUtils.toastInfo(requireActivity(), ResUtils.getResString(requireActivity(), "yyxx_tv_check_agreement"))
+                        return
+                    }
                     try {
                         val userName = eetAccount.editText.text.trim().toString()
                         val pwd = eetPwd.editText.text.trim().toString()

+ 34 - 5
library_core/src/main/java/cn/yyxx/eyuangame/core/network/Host.kt

@@ -1,6 +1,7 @@
 package cn.yyxx.eyuangame.core.network
 
 import android.content.Context
+import cn.yyxx.eyuangame.base.utils.ParamsUtils
 import cn.yyxx.support.HostModelUtils
 
 /**
@@ -9,8 +10,14 @@ import cn.yyxx.support.HostModelUtils
  */
 object Host {
 
-    private const val DEFAULT_ONLINE_HOST = "https://sdkapi.eyuangame.com"
-    private const val DEFAULT_TEST_HOST = "https://testsdkapi.eyuangame.com"
+    private var DEFAULT_ONLINE_HOST = ""
+    private var DEFAULT_TEST_HOST = ""
+
+    private const val DEFAULT_ONLINE_HOST_HK = "https://sdkapi.eyuangame.com"
+    private const val DEFAULT_TEST_HOST_HK = "https://testsdkapi.eyuangame.com"
+
+    private const val DEFAULT_ONLINE_HOST_VN = "https://sdkapi.aiigame.com"
+    private const val DEFAULT_TEST_HOST_VN = "https://testsdkapi.aiigame.com"
 
     var HOST = ""
 
@@ -19,6 +26,11 @@ object Host {
      */
     var IP_MODEL = 3
 
+    /**
+     * 默认港澳台
+     */
+    var ENV = 1
+
     const val BASIC_ROUTE_INIT_SDK = "activate"
     const val BASIC_ROUTE_LOGIN = "member_login"
     const val BASIC_ROUTE_THIRD_PART_LOGIN = "third_plat_login"
@@ -36,13 +48,30 @@ object Host {
 
     fun initHostModel(context: Context) {
         IP_MODEL = HostModelUtils.getHostModel(context)
+        ENV = ParamsUtils.getDoMainEnv(context)
         setDefaultHost()
     }
 
     private fun setDefaultHost() {
-        when (IP_MODEL) {
-            HostModelUtils.ENV_TEST -> HOST = DEFAULT_TEST_HOST
-            HostModelUtils.ENV_ONLINE -> HOST = DEFAULT_ONLINE_HOST
+        DEFAULT_ONLINE_HOST = when (ENV) {
+            Env.HK -> DEFAULT_ONLINE_HOST_HK
+            Env.VN -> DEFAULT_ONLINE_HOST_VN
+            else -> DEFAULT_ONLINE_HOST_HK
         }
+        DEFAULT_TEST_HOST = when (ENV) {
+            Env.HK -> DEFAULT_TEST_HOST_HK
+            Env.VN -> DEFAULT_TEST_HOST_VN
+            else -> DEFAULT_TEST_HOST_HK
+        }
+        HOST = when (IP_MODEL) {
+            HostModelUtils.ENV_TEST -> DEFAULT_TEST_HOST
+            HostModelUtils.ENV_ONLINE -> DEFAULT_ONLINE_HOST
+            else -> DEFAULT_ONLINE_HOST
+        }
+    }
+
+    object Env {
+        const val HK = 1
+        const val VN = 2
     }
 }

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

@@ -62,6 +62,7 @@ object VolleyRequest {
 //            val tmp = HexUtils.hexString2Bytes(hexP)
 //            val base64P = Base64Utils.encode(tmp)
 //            obj.put("p", base64P)
+            Logger.d("host: ${Host.HOST}")
 
             val request = object : JsonObjectRequest(Method.POST, Host.HOST, obj, Response.Listener {
                 val resultInfo = ResultInfo()

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

@@ -19,7 +19,7 @@ import cn.yyxx.support.device.DeviceInfoUtils
  * @author #Suyghur.
  * Created on 2021/06/19
  */
-class AgreementDialog constructor(context: Context, url: String, val isLandscape: Boolean) : Dialog(context) {
+class AgreementDialog constructor(context: Context, url: String, private val isLandscape: Boolean) : Dialog(context) {
 
     lateinit var ivReturn: ImageView
         private set

+ 22 - 4
library_core/src/main/java/cn/yyxx/eyuangame/core/ui/dialog/ChooseLoginDialog.kt

@@ -6,6 +6,8 @@ import android.graphics.Color
 import android.graphics.drawable.ColorDrawable
 import android.view.*
 import android.widget.ImageView
+import cn.yyxx.eyuangame.core.network.Host
+import cn.yyxx.support.DensityUtils
 import cn.yyxx.support.ResUtils
 
 /**
@@ -35,16 +37,32 @@ class ChooseLoginDialog(context: Context) : Dialog(context) {
         val view: View = LayoutInflater.from(context).inflate(ResUtils.getResId(context, "yyxx_choose_login_dialog", "layout"), null)
         setContentView(view)
 
-        val attr = window?.attributes as WindowManager.LayoutParams
+//        val attr = window?.attributes as WindowManager.LayoutParams
         //设置dialog 在布局中的位置
-        attr.height = ViewGroup.LayoutParams.WRAP_CONTENT
-        attr.width = ViewGroup.LayoutParams.WRAP_CONTENT
+//        attr.height = ViewGroup.LayoutParams.WRAP_CONTENT
+//        attr.width = ViewGroup.LayoutParams.WRAP_CONTENT
 //        attr.width = DensityUtils.getHeightAndWidth(context)[0] - 150
-        attr.gravity = Gravity.CENTER
+//        if (isLandscape) {
+//            attr.width = DensityUtils.getHeightAndWidth(context)[0] / 2
+//        } else {
+//            attr.width = DensityUtils.getHeightAndWidth(context)[0] - 80
+//        }
+//        attr.gravity = Gravity.CENTER
 
         typeGoogle = view.findViewById(ResUtils.getResId(context, "yyxx_iv_google", "id"))
         typeFacebook = view.findViewById(ResUtils.getResId(context, "yyxx_iv_facebook", "id"))
         typeAccount = view.findViewById(ResUtils.getResId(context, "yyxx_iv_account", "id"))
         typeGuest = view.findViewById(ResUtils.getResId(context, "yyxx_iv_guest", "id"))
+        when (Host.ENV) {
+            Host.Env.HK -> {
+                typeAccount.setImageResource(ResUtils.getResId(context, "yyxx_account_login_img", "drawable"))
+                typeGuest.setImageResource(ResUtils.getResId(context, "yyxx_guest_login_img", "drawable"))
+            }
+            Host.Env.VN -> {
+                typeAccount.setImageResource(ResUtils.getResId(context, "yyxx_account_login_vn_img", "drawable"))
+                typeGuest.setImageResource(ResUtils.getResId(context, "yyxx_guest_login_vn_img", "drawable"))
+            }
+        }
+
     }
 }

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

@@ -101,14 +101,14 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
 
     private fun createView() {
         rootLinearLayout = LinearLayout(activity)
-        rootLinearLayout.layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 45f), DensityUtils.dip2px(activity, 45f))
+        rootLinearLayout.layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 48f), DensityUtils.dip2px(activity, 48f))
 
         frameLayout = FrameLayout(activity)
         frameLayout.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
 
         ballView = ImageView(activity)
         ballView.apply {
-            layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 45f), DensityUtils.dip2px(activity, 45f))
+            layoutParams = ViewGroup.LayoutParams(DensityUtils.dip2px(activity, 48f), DensityUtils.dip2px(activity, 48f))
             callback.onUpdateBallView(ballView, isLeftLocation, false)
             scaleType = ImageView.ScaleType.FIT_XY
             //TODO onClickListener ?
@@ -134,8 +134,8 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
         menu = PopupWindow(activity)
         menu.apply {
             contentView = ballMenu.contentView
-            width = DensityUtils.dip2px(activity, 45f + mSize * 45f)
-            height = DensityUtils.dip2px(activity, 45f)
+            width = DensityUtils.dip2px(activity, 48f + mSize * 48f)
+            height = DensityUtils.dip2px(activity, 48f)
             isFocusable = true
             setBackgroundDrawable(ColorDrawable())
             isOutsideTouchable = true
@@ -163,12 +163,12 @@ class FloatingBall(val activity: Activity, private val isLandscape: Boolean, pri
         }
         this.isHide = isHalf
         if (isHalf) {
-            rootLinearLayout.layoutParams = LayoutParams(DensityUtils.dip2px(activity, 22.5f), DensityUtils.dip2px(activity, 45f))
-            layoutParams = LayoutParams(DensityUtils.dip2px(activity, 22.5f), DensityUtils.dip2px(activity, 45f))
+            rootLinearLayout.layoutParams = LayoutParams(DensityUtils.dip2px(activity, 24f), DensityUtils.dip2px(activity, 48f))
+            layoutParams = LayoutParams(DensityUtils.dip2px(activity, 24f), DensityUtils.dip2px(activity, 48f))
             frameLayout.updateViewLayout(ballView, layoutParams)
         } else {
-            rootLinearLayout.layoutParams = LayoutParams(DensityUtils.dip2px(activity, 45f), DensityUtils.dip2px(activity, 45f))
-            layoutParams = LayoutParams(DensityUtils.dip2px(activity, 45f), DensityUtils.dip2px(activity, 45f))
+            rootLinearLayout.layoutParams = LayoutParams(DensityUtils.dip2px(activity, 48f), DensityUtils.dip2px(activity, 48f))
+            layoutParams = LayoutParams(DensityUtils.dip2px(activity, 48f), DensityUtils.dip2px(activity, 48f))
             frameLayout.updateViewLayout(ballView, layoutParams)
         }
     }

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

@@ -37,9 +37,9 @@ class FloatingBallMenu(val context: Context, private val callback: FloatingBallM
 
         menuView = contentView.findViewById(ResUtils.getResId(context, "yyxx_gv_menu", "id"))
         //重新设置menuView宽高
-        val menuWidth = DensityUtils.dip2px(context, callback.onInitMenuData().size * 45f)
+        val menuWidth = DensityUtils.dip2px(context, callback.onInitMenuData().size * 48f)
         val menuParams = LinearLayout.LayoutParams(menuWidth, LinearLayout.LayoutParams.WRAP_CONTENT)
-        menuParams.marginEnd = DensityUtils.dip2px(context, 5f)
+        menuParams.marginEnd = DensityUtils.dip2px(context, 2.5f)
         menuView.layoutParams = menuParams
     }
 
@@ -56,7 +56,6 @@ class FloatingBallMenu(val context: Context, private val callback: FloatingBallM
         } else {
             containerLayout.gravity = Gravity.CENTER_VERTICAL or Gravity.LEFT
         }
-//        updateViewBackground(isLeftLocation)
     }
 
     interface FloatingBallMenuCallback {

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


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


+ 6 - 5
library_core/src/main/res/layout/yyxx_auto_login_dialog.xml

@@ -3,6 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
+    android:layout_gravity="center"
     android:background="@drawable/yyxx_white_panel_bg"
     android:padding="20dp">
 
@@ -23,7 +24,7 @@
             android:layout_height="wrap_content"
             android:text="@string/yyxx_title_auto_login1"
             android:textColor="@color/yyxx_color_gray_50"
-            android:textSize="15sp"
+            android:textSize="14sp"
             android:textStyle="bold" />
 
         <TextView
@@ -32,7 +33,7 @@
             android:layout_height="wrap_content"
             android:text="XXXXXXXXXXX"
             android:textColor="@color/yyxx_color_green_blue"
-            android:textSize="15sp"
+            android:textSize="14sp"
             android:textStyle="bold" />
     </LinearLayout>
 
@@ -53,7 +54,7 @@
             android:layout_height="wrap_content"
             android:text="@string/yyxx_title_auto_login2"
             android:textColor="@color/yyxx_color_gray_50"
-            android:textSize="15sp"
+            android:textSize="14sp"
             android:textStyle="bold" />
 
         <TextView
@@ -63,7 +64,7 @@
             android:layout_marginLeft="10dp"
             android:text="(2s)"
             android:textColor="@color/yyxx_color_green_blue"
-            android:textSize="15sp"
+            android:textSize="12sp"
             android:textStyle="bold" />
     </LinearLayout>
 
@@ -76,7 +77,7 @@
         android:background="@drawable/yyxx_btn_green_blue_bg"
         android:text="@string/yyxx_tv_switch"
         android:textColor="@color/yyxx_color_white"
-        android:textSize="14sp"
+        android:textSize="12sp"
         android:textStyle="bold"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"

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

@@ -11,7 +11,7 @@
         android:id="@+id/yyxx_iv_google"
         android:layout_width="230dp"
         android:layout_height="50dp"
-        android:background="@drawable/yyxx_google_onclick_selector"
+        android:src="@drawable/yyxx_google_onclick_selector"
         android:clickable="true"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
@@ -22,7 +22,7 @@
         android:layout_width="230dp"
         android:layout_height="50dp"
         android:layout_marginTop="5dp"
-        android:background="@drawable/yyxx_facebook_login_img"
+        android:src="@drawable/yyxx_facebook_login_img"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/yyxx_iv_google" />
@@ -32,7 +32,7 @@
         android:layout_width="230dp"
         android:layout_height="50dp"
         android:layout_marginTop="5dp"
-        android:background="@drawable/yyxx_account_login_img"
+        android:src="@drawable/yyxx_account_login_img"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/yyxx_iv_facebook" />
@@ -42,7 +42,7 @@
         android:layout_width="230dp"
         android:layout_height="50dp"
         android:layout_marginTop="5dp"
-        android:background="@drawable/yyxx_guest_login_img"
+        android:src="@drawable/yyxx_guest_login_img"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"

+ 4 - 2
library_core/src/main/res/layout/yyxx_floating_ball_item.xml

@@ -14,11 +14,13 @@
 
     <TextView
         android:id="@+id/yyxx_tv_desc"
-        android:layout_width="wrap_content"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="2dp"
         android:text="feature"
+        android:gravity="center"
+        android:singleLine="true"
         android:textColor="@color/yyxx_color_green_blue"
-        android:textSize="10sp" />
+        android:textSize="8sp" />
 
 </LinearLayout>

+ 3 - 0
library_core/src/main/res/layout/yyxx_floating_ball_menu.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/yyxx_ll_container"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
@@ -12,6 +13,8 @@
         android:layout_height="wrap_content"
         android:cacheColorHint="@color/yyxx_transparent"
         android:fadingEdge="none"
+        android:scrollbars="none"
+        tools:listitem="@layout/yyxx_floating_ball_item"
         android:listSelector="@color/yyxx_transparent"
         android:padding="5dp" />
 

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

@@ -19,7 +19,7 @@
         android:id="@+id/yyxx_tv_desc"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="abc1231"
+        android:text=""
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"

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

@@ -9,10 +9,10 @@
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/yyxx_cl_login"
-        android:layout_width="320dp"
+        android:layout_width="340dp"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="30dp"
-        android:layout_marginRight="30dp"
+        android:layout_marginLeft="20dp"
+        android:layout_marginRight="20dp"
         android:background="@drawable/yyxx_white_panel_bg"
         android:visibility="visible"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -35,7 +35,7 @@
         <cn.yyxx.eyuangame.core.ui.NoScrollViewPager
             android:id="@+id/yyxx_vp"
             android:layout_width="match_parent"
-            android:layout_height="250dp"
+            android:layout_height="260dp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"

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

@@ -84,7 +84,7 @@
             android:layout_marginLeft="5dp"
             android:text="@string/yyxx_tv_agreement"
             android:textColor="@color/yyxx_color_gray"
-            android:textSize="12sp"
+            android:textSize="10sp"
             android:textStyle="bold"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"

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

@@ -71,7 +71,7 @@
             android:layout_marginLeft="5dp"
             android:text="@string/yyxx_tv_agreement"
             android:textColor="@color/yyxx_color_gray"
-            android:textSize="12sp"
+            android:textSize="10sp"
             android:textStyle="bold"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"

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

@@ -47,7 +47,7 @@
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/yyxx_cl_bind_account"
-            android:layout_width="80dp"
+            android:layout_width="100dp"
             android:layout_height="100dp"
             android:layout_marginStart="20dp"
             android:layout_marginTop="20dp"
@@ -99,7 +99,7 @@
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/yyxx_cl_bind_phone"
-            android:layout_width="80dp"
+            android:layout_width="100dp"
             android:layout_height="100dp"
             android:layout_marginStart="10dp"
             android:layout_marginTop="20dp"
@@ -140,7 +140,7 @@
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/yyxx_cl_modify_pwd"
-            android:layout_width="80dp"
+            android:layout_width="100dp"
             android:layout_height="100dp"
             android:layout_marginStart="10dp"
             android:layout_marginTop="20dp"

+ 1 - 0
library_hk_language/.gitignore

@@ -0,0 +1 @@
+/build

+ 62 - 0
library_hk_language/build.gradle

@@ -0,0 +1,62 @@
+plugins {
+    id 'com.android.library'
+    id 'kotlin-android'
+}
+
+android {
+    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    buildToolsVersion rootProject.ext.android.buildToolsVersion
+
+    defaultConfig {
+        minSdkVersion rootProject.ext.android.minSdkVersion
+        targetSdkVersion rootProject.ext.android.targetSdkVersion
+
+        ndk {
+            // 设置支持的SO库架构
+            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
+        }
+    }
+
+
+    buildTypes {
+        release {
+            minifyEnabled rootProject.ext.module.minifyEnabled
+            proguardFiles 'proguard-rules.pro'
+        }
+    }
+
+    buildFeatures {
+        buildConfig = false
+    }
+
+    lintOptions {
+        abortOnError false
+    }
+
+    repositories {
+        flatDir {
+            dirs '../libs'
+        }
+    }
+
+    dexOptions {
+        preDexLibraries = false
+    }
+
+    compileOptions {
+        kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyaungame.language"]
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    kotlinOptions {
+        jvmTarget = "1.8"
+    }
+}
+
+dependencies {
+
+}

+ 146 - 0
library_hk_language/proguard-rules.pro

@@ -0,0 +1,146 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 7
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+-dontoptimize
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+-ignorewarnings
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+# 保留java与js交互注解
+-keepattributes *Annotation*
+-keepattributes *JavascriptInterface*
+
+# 保留内部类
+-keepattributes Exceptions,InnerClasses
+
+# 保留泛型
+-keepattributes Signature
+
+-keep class kotlin.** { *; }
+-keep class kotlin.Metadata { *; }
+-dontwarn kotlin.**
+-keepclassmembers class **$WhenMappings {
+    <fields>;
+}
+-keepclassmembers class kotlin.Metadata {
+    public <methods>;
+}
+-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
+    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
+}
+
+-keepnames class * implements java.io.Serializable
+
+-keepclassmembers class * implements java.io.Serializable {
+   static final long serialVersionUID;
+   private static final java.io.ObjectStreamField[] serialPersistentFields;
+   !static !transient <fields>;
+   private void writeObject(java.io.ObjectOutputStream);
+   private void readObject(java.io.ObjectInputStream);
+   java.lang.Object writeReplace();
+   java.lang.Object readResolve();
+}
+
+-keepclassmembers class **.R$* {
+    public static <fields>;
+}
+-keep class **.R$* {
+ *;
+}
+
+-keep public class * extends android.app.Activity{
+	public <fields>;
+	public <methods>;
+}
+-keep public class * extends android.app.Application{
+	public <fields>;
+	public <methods>;
+}
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends androidx.core.app.CoreComponentFactory
+
+
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+-keepclasseswithmembers class * {
+	public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+	public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclasseswithmembernames class *{
+	native <methods>;
+}
+
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
+
+-keepclasseswithmembers class * {
+    ... *JNI*(...);
+}
+
+-keepclasseswithmembernames class * {
+	... *JRI*(...);
+}
+
+-keep class **JNI* {*;}
+
+
+-keep class cn.yyxx.support.**{*;}
+-keep class com.dolin.zap.**{*;}
+-keep class cn.yyxx.eyuangame.base.entity.SdkEvent{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.entity.SdkChargeInfo{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.entity.SdkRoleInfo{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.internal.ICallback{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.internal.IInitialize{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.utils.Logger{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.utils.ParamsUtils{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.EYuanGame{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.EYuanGameApplication{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.Version{public <fields>; public <methods>;}
+
+# firebase
+-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
+-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.
+

+ 5 - 0
library_hk_language/src/main/AndroidManifest.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="cn.yyxx.columbus.language">
+
+</manifest>

+ 1 - 0
library_core/src/main/res/values/yyxx_strings.xml → library_hk_language/src/main/res/values/yyxx_strings.xml

@@ -25,6 +25,7 @@
     <string name="yyxx_tv_bind_phone">手機綁定</string>
     <string name="yyxx_tv_modify_pwd">修改密碼</string>
     <string name="yyxx_tv_agreement">我已閲讀並同意《會員條款及管理規章》</string>
+    <string name="yyxx_tv_check_agreement">請您先閱讀並勾選同意《會員條款及管理規章》</string>
     <string name="yyxx_tv_agreement_title">會員條款及管理規章</string>
     <string name="yyxx_tv_member_center_title">會員中心</string>
     <string name="yyxx_tv_forget_pwd_title">忘記密碼</string>

+ 1 - 0
library_vn_language/.gitignore

@@ -0,0 +1 @@
+/build

+ 62 - 0
library_vn_language/build.gradle

@@ -0,0 +1,62 @@
+plugins {
+    id 'com.android.library'
+    id 'kotlin-android'
+}
+
+android {
+    compileSdkVersion rootProject.ext.android.compileSdkVersion
+    buildToolsVersion rootProject.ext.android.buildToolsVersion
+
+    defaultConfig {
+        minSdkVersion rootProject.ext.android.minSdkVersion
+        targetSdkVersion rootProject.ext.android.targetSdkVersion
+
+        ndk {
+            // 设置支持的SO库架构
+            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
+        }
+    }
+
+
+    buildTypes {
+        release {
+            minifyEnabled rootProject.ext.module.minifyEnabled
+            proguardFiles 'proguard-rules.pro'
+        }
+    }
+
+    buildFeatures {
+        buildConfig = false
+    }
+
+    lintOptions {
+        abortOnError false
+    }
+
+    repositories {
+        flatDir {
+            dirs '../libs'
+        }
+    }
+
+    dexOptions {
+        preDexLibraries = false
+    }
+
+    compileOptions {
+        kotlinOptions.freeCompilerArgs += ['-module-name', "cn.yyxx.eyaungame.language"]
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    kotlinOptions {
+        jvmTarget = "1.8"
+    }
+}
+
+dependencies {
+
+}

+ 146 - 0
library_vn_language/proguard-rules.pro

@@ -0,0 +1,146 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
+-optimizationpasses 7
+# 混合时不使用大小写混合,混合后的类名为小写
+-dontusemixedcaseclassnames
+# 指定不去忽略非公共库的类
+-dontskipnonpubliclibraryclasses
+-dontoptimize
+# 这句话能够使我们的项目混淆后产生映射文件
+# 包含有类名->混淆后类名的映射关系
+-verbose
+-ignorewarnings
+# 指定不去忽略非公共库的类成员
+-dontskipnonpubliclibraryclassmembers
+# 指定混淆是采用的算法,后面的参数是一个过滤器
+# 这个过滤器是谷歌推荐的算法,一般不做更改
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+# 保留java与js交互注解
+-keepattributes *Annotation*
+-keepattributes *JavascriptInterface*
+
+# 保留内部类
+-keepattributes Exceptions,InnerClasses
+
+# 保留泛型
+-keepattributes Signature
+
+-keep class kotlin.** { *; }
+-keep class kotlin.Metadata { *; }
+-dontwarn kotlin.**
+-keepclassmembers class **$WhenMappings {
+    <fields>;
+}
+-keepclassmembers class kotlin.Metadata {
+    public <methods>;
+}
+-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
+    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
+}
+
+-keepnames class * implements java.io.Serializable
+
+-keepclassmembers class * implements java.io.Serializable {
+   static final long serialVersionUID;
+   private static final java.io.ObjectStreamField[] serialPersistentFields;
+   !static !transient <fields>;
+   private void writeObject(java.io.ObjectOutputStream);
+   private void readObject(java.io.ObjectInputStream);
+   java.lang.Object writeReplace();
+   java.lang.Object readResolve();
+}
+
+-keepclassmembers class **.R$* {
+    public static <fields>;
+}
+-keep class **.R$* {
+ *;
+}
+
+-keep public class * extends android.app.Activity{
+	public <fields>;
+	public <methods>;
+}
+-keep public class * extends android.app.Application{
+	public <fields>;
+	public <methods>;
+}
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends androidx.core.app.CoreComponentFactory
+
+
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+-keepclasseswithmembers class * {
+	public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+	public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclasseswithmembernames class *{
+	native <methods>;
+}
+
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
+
+-keepclasseswithmembers class * {
+    ... *JNI*(...);
+}
+
+-keepclasseswithmembernames class * {
+	... *JRI*(...);
+}
+
+-keep class **JNI* {*;}
+
+
+-keep class cn.yyxx.support.**{*;}
+-keep class com.dolin.zap.**{*;}
+-keep class cn.yyxx.eyuangame.base.entity.SdkEvent{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.entity.SdkChargeInfo{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.entity.SdkRoleInfo{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.internal.ICallback{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.internal.IInitialize{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.utils.Logger{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.utils.ParamsUtils{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.EYuanGame{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.base.EYuanGameApplication{public <fields>; public <methods>;}
+-keep class cn.yyxx.eyuangame.Version{public <fields>; public <methods>;}
+
+# firebase
+-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
+-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.
+

+ 5 - 0
library_vn_language/src/main/AndroidManifest.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="cn.yyxx.columbus.language">
+
+</manifest>

+ 75 - 0
library_vn_language/src/main/res/values/yyxx_strings.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string-array name="yyxx_login_tab">
+        <item>Đăng Nhập</item>
+        <item>Đăng Ký</item>
+    </string-array>
+
+    <string name="yyxx_login_type_google">Đăng Nhập Bằng Google</string>
+    <string name="yyxx_login_type_facebook">Đăng Nhập Bằng Facebook</string>
+    <string name="yyxx_login_type_account">Đăng Nhập T.Khoản</string>
+    <string name="yyxx_login_type_guest">Vào Ngay</string>
+
+    <string name="yyxx_tv_login_google">Đăng nhập T.Khoản Google…</string>
+    <string name="yyxx_tv_login_facebook">Đăng nhập T.Khoản FB…</string>
+    <string name="yyxx_tv_login_guest">Đăng nhập T.Khoản Guest…</string>
+
+    <string name="yyxx_tv_forget"><u>Quên Mật Khẩu?</u></string>
+    <string name="yyxx_tv_launcher">Đăng Nhập</string>
+    <string name="yyxx_tv_register">Đăng Ký</string>
+    <string name="yyxx_tv_confirm">Xác Nhận</string>
+    <string name="yyxx_tv_switch">Đổi T.Khoản</string>
+    <string name="yyxx_tv_area_code">Mã Vùng</string>
+    <string name="yyxx_tv_bind_account">Liên Kết T.Khoản</string>
+    <string name="yyxx_tv_bind_phone">Liên Kết SĐT</string>
+    <string name="yyxx_tv_modify_pwd">Đổi Mật Khẩu</string>
+    <string name="yyxx_tv_agreement">Đồng ý các điều khoản sử dụng</string>
+    <string name="yyxx_tv_check_agreement">Đồng ý các điều khoản sử dụng</string>
+    <string name="yyxx_tv_agreement_title">Điều Khoản Sử Dụng</string>
+    <string name="yyxx_tv_member_center_title">Trung Tâm Hội Viên</string>
+    <string name="yyxx_tv_forget_pwd_title">Quên Mật Khẩu</string>
+    <string name="yyxx_tv_exit_content">Xác nhận thoát game ngay?</string>
+    <string name="yyxx_tv_exit_left">Gặp lại lần sau</string>
+    <string name="yyxx_tv_exit_right">Chơi tiếp</string>
+    <string name="yyxx_tv_bind_account_tips">Nhắc: T.Khoản tại đây là T.Khoản mới, đừng nhập T.Khoản đã đăng ký</string>
+    <string name="yyxx_iv_bind_phone_tips1">T.Khoản này đã liên kết SĐT</string>
+    <string name="yyxx_iv_bind_phone_tips2">SĐT đã liên kết là:</string>
+    <string name="yyxx_tv_get_captcha">Nhận mã xác minh</string>
+
+    <string name="yyxx_tv_float_member_desc">Hội Viện</string>
+    <string name="yyxx_tv_float_gif_desc">Gói Quà</string>
+    <string name="yyxx_tv_float_gm_desc">CSKH</string>
+    <string name="yyxx_tv_float_charge_desc">Nạp</string>
+    <string name="yyxx_tv_float_invite_desc">Mời Bạn Bè</string>
+
+
+    <string name="yyxx_title_forget">Quên Mật Khẩu</string>
+    <string name="yyxx_title_agreement">Điều Khoản Sử Dụng</string>
+    <string name="yyxx_title_auto_login1">Chào mừng,</string>
+    <string name="yyxx_title_auto_login2">Đang đăng nhập, vui lòng chờ…</string>
+
+    <string name="yyxx_hint_account">Nhập T.Khoản của bạn</string>
+    <string name="yyxx_hint_pwd">Nhập MK của bạn</string>
+    <string name="yyxx_hint_register_account">6–18 ký tự(chữ cái và chữ số)</string>
+    <string name="yyxx_hint_register_pwd">6–18 ký tự(chữ cái và chữ số)</string>
+    <string name="yyxx_hint_forget_account">Hãy nhập T.Khoản của bạn</string>
+    <string name="yyxx_hint_forget_phone">Hãy nhập SĐT của bạn</string>
+    <string name="yyxx_hint_bind_account_uname">Hãy tạo T.Khoản của bạn</string>
+    <string name="yyxx_hint_bind_account_pwd">Hãy cài đặt MK của bạn</string>
+    <string name="yyxx_hint_bind_phone_captcha">Hãy nhập mã xác minh</string>
+    <string name="yyxx_hint_modify_pwd_old">Hãy nhập MK cũ của bạn</string>
+    <string name="yyxx_hint_modify_pwd_new">Hãy nhập MK mới của bạn</string>
+
+    <string name="yyxx_tips_account_format_error">Lỗi quy cách T.Khoản, hãy nhập lại</string>
+    <string name="yyxx_tips_pwd_format_error">Lỗi quy cách MK, hãy nhập lại</string>
+    <string name="yyxx_tips_old_pwd_format_error">Lỗi quy cách MK cũ, hãy nhập lại</string>
+    <string name="yyxx_tips_new_pwd_format_error">Lỗi quy cách MK mới, hãy nhập lại</string>
+    <string name="yyxx_tips_phone_format_error">Lỗi quy cách SĐT, hãy nhập lại</string>
+    <string name="yyxx_tips_area_code_format_error">Lỗi mã vùng, hãy nhập lại</string>
+    <string name="yyxx_tips_captcha_format_error">Lỗi quy cách mã xác minh, hãy nhập lại</string>
+
+    <string name="yyxx_charge_tv_error">Lỗi dịch vụ thanh toán, vui lòng thử lại sau</string>
+    <string name="yyxx_charge_loading_tips">Đang nhận thông tin đơn hàng, vui lòng thử lại sau…</string>
+    <string name="facebook_app_id" translatable="false"></string>
+    <string name="fb_login_protocol_scheme" translatable="false"></string>
+</resources>

+ 2 - 0
settings.gradle

@@ -2,3 +2,5 @@ rootProject.name = "EYuanGameSdk-KTX"
 include ':demo'
 include ':library_base'
 include ':library_core'
+include ':library_hk_language'
+include ':library_vn_language'