diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 7037c85..518c6bc 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,7 +4,7 @@
-
+
@@ -15,4 +15,4 @@
-
\ No newline at end of file
+
diff --git a/app/build.gradle b/app/build.gradle
index 8f2cd61..843ea5f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,8 +33,7 @@ android {
javaCompileOptions {
annotationProcessorOptions {
arguments = [
-// AROUTER_MODULE_NAME: project.getName()
- AROUTER_MODULE_NAME: android.defaultConfig.applicationId
+ AROUTER_MODULE_NAME: project.getName()
]
}
}
@@ -102,7 +101,7 @@ android {
}
buildTypes {
release {
- minifyEnabled false
+ minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
@@ -124,9 +123,7 @@ android {
debug {
debuggable true
- minifyEnabled false
-// applicationIdSuffix ".test" // 为测试包添加包名后缀
-// resValue("string", "app_name", "秘地测试版")
+ minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
@@ -165,7 +162,7 @@ android {
}
kotlinOptions {
- jvmTarget = '11'
+ jvmTarget = '17'
}
dexOptions {
dexInProcess true
@@ -193,7 +190,13 @@ dependencies {
implementation files('libs/logger-2.2.2-release.aar')
implementation files('libs/main-2.2.3-release.aar')
+ implementation files('libs/WbCloudFaceLiveSdk-face-v6.6.2-8e4718fc.aar')
+ implementation files('libs/WbCloudNormal-v5.1.10-4e3e198.aar')
+
+ implementation(libs.arouter.api.v150)
+ //annotationProcessor
+ annotationProcessor libs.arouter.compiler
implementation project(':modulevocal') // 必须
annotationProcessor project(':modulevocal') // 关键!
@@ -201,10 +204,6 @@ dependencies {
api project(":moduleLogin")
implementation project(':modulemain')
- implementation(libs.arouter.api.v150)
- //annotationProcessor
- annotationProcessor libs.arouter.compiler
-
//aar的名称,例如:WbCloudFaceLiveSdk-v6.0.0-1234567.aar,填入'WbCloudFaceLiveSdk-v6.0.0-1234567'
// implementation(name: 'WbCloudFaceLiveSdk-face-v6.6.2-8e4718fc', ext: 'aar')
////2. 云normal SDK,
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_app_bate.png b/app/src/main/res/mipmap-hdpi/ic_launcher_app_bate.png
new file mode 100644
index 0000000..4de29e0
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_app_bate.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_app_bate.png b/app/src/main/res/mipmap-mdpi/ic_launcher_app_bate.png
new file mode 100644
index 0000000..6424c9f
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_app_bate.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_app_bate.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_app_bate.png
new file mode 100644
index 0000000..2a114f7
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_app_bate.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_app_bate.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_app_bate.png
new file mode 100644
index 0000000..6fe9095
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_app_bate.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_app_bate.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_app_bate.png
new file mode 100644
index 0000000..8175262
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_app_bate.png differ
diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java
index a1d591a..a757b80 100644
--- a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java
+++ b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java
@@ -51,7 +51,7 @@ public class EnvironmentPrefs {
// }
// 默认使用生产环境
- String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.PRODUCTION.name());
+ String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.TEST.name());
try {
return EnvironmentEnum.valueOf(envName);
} catch (IllegalArgumentException e) {
diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/view/RichTextView.kt b/moduleUtil/src/main/java/com/xscm/moduleutil/view/RichTextView.kt
new file mode 100644
index 0000000..b9165e1
--- /dev/null
+++ b/moduleUtil/src/main/java/com/xscm/moduleutil/view/RichTextView.kt
@@ -0,0 +1,207 @@
+package com.xscm.moduleutil.view
+
+import android.content.Context
+import android.graphics.Color
+import android.graphics.Typeface
+import android.text.Html
+import android.text.Spannable
+import android.text.SpannableStringBuilder
+import android.text.TextPaint
+import android.text.method.LinkMovementMethod
+import android.text.style.*
+import android.util.Log
+import android.util.AttributeSet
+import android.view.View
+import android.widget.TextView
+import androidx.annotation.ColorInt
+import androidx.annotation.StringRes
+
+/**
+ * 封装了富文本展示功能的自定义TextView
+ * 支持HTML格式、自定义样式文本和点击事件
+ */
+class RichTextView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : androidx.appcompat.widget.AppCompatTextView(context, attrs, defStyleAttr) {
+
+ // 富文本构建器
+ private val spannableBuilder = SpannableStringBuilder()
+
+ init {
+ // 初始化配置
+ movementMethod = LinkMovementMethod.getInstance()
+ highlightColor = Color.TRANSPARENT // 移除点击高亮
+ }
+
+ /**
+ * 设置HTML格式的富文本
+ */
+ fun setHtmlText(html: String) {
+ val spanned = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
+ Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT)
+ } else {
+ @Suppress("DEPRECATION")
+ Html.fromHtml(html)
+ }
+ text = spanned
+ }
+
+ /**
+ * 从资源文件设置HTML富文本
+ */
+ fun setHtmlText(@StringRes resId: Int) {
+ setHtmlText(context.getString(resId))
+ }
+
+ /**
+ * 开始构建富文本
+ */
+ fun beginBuild(): RichTextBuilder {
+ spannableBuilder.clear()
+ return RichTextBuilder()
+ }
+
+ /**
+ * 富文本构建器
+ * 支持链式调用添加各种样式的文本
+ */
+ inner class RichTextBuilder {
+
+ /**
+ * 添加普通文本
+ */
+ fun addText(text: String): RichTextBuilder {
+ spannableBuilder.append(text)
+ return this
+ }
+
+ /**
+ * 添加普通文本(从资源文件)
+ */
+ fun addText(@StringRes resId: Int): RichTextBuilder {
+ return addText(context.getString(resId))
+ }
+
+ /**
+ * 添加加粗文本
+ */
+ fun addBoldText(text: String): RichTextBuilder {
+ return addStyledText(text, StyleSpan(Typeface.BOLD))
+ }
+
+ /**
+ * 添加斜体文本
+ */
+ fun addItalicText(text: String): RichTextBuilder {
+ return addStyledText(text, StyleSpan(Typeface.ITALIC))
+ }
+
+ /**
+ * 添加下划线文本
+ */
+ fun addUnderlineText(text: String): RichTextBuilder {
+ return addStyledText(text, UnderlineSpan())
+ }
+
+ /**
+ * 添加删除线文本
+ */
+ fun addStrikethroughText(text: String): RichTextBuilder {
+ return addStyledText(text, StrikethroughSpan())
+ }
+
+ /**
+ * 添加指定颜色的文本
+ */
+ fun addColoredText(text: String, @ColorInt color: Int): RichTextBuilder {
+ return addStyledText(text, ForegroundColorSpan(color))
+ }
+
+ /**
+ * 添加指定背景色的文本
+ */
+ fun addBackgroundColoredText(text: String, @ColorInt color: Int): RichTextBuilder {
+ return addStyledText(text, BackgroundColorSpan(color))
+ }
+
+ /**
+ * 添加指定大小的文本
+ * @param proportion 相对于默认大小的比例
+ */
+ fun addSizedText(text: String, proportion: Float): RichTextBuilder {
+ return addStyledText(text, RelativeSizeSpan(proportion))
+ }
+
+ /**
+ * 添加带有点击事件的文本
+ */
+ fun addClickableText(
+ text: String,
+ @ColorInt linkColor: Int = Color.BLUE,
+ isUnderline: Boolean = false,
+ onClick: () -> Unit
+ ): RichTextBuilder {
+ val start = spannableBuilder.length
+ spannableBuilder.append(text)
+ val end = spannableBuilder.length
+
+ val clickableSpan = object : ClickableSpan() {
+ override fun onClick(widget: View) {
+ onClick.invoke()
+ }
+
+ override fun updateDrawState(ds: TextPaint) {
+ super.updateDrawState(ds)
+ ds.color = linkColor
+ ds.isUnderlineText = isUnderline
+ }
+ }
+
+ spannableBuilder.setSpan(
+ clickableSpan,
+ start,
+ end,
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+ )
+
+ return this
+ }
+
+ /**
+ * 添加换行
+ */
+ fun addLineBreak(): RichTextBuilder {
+ spannableBuilder.append("\n")
+ return this
+ }
+
+ /**
+ * 添加自定义样式的文本
+ */
+ fun addStyledText(text: String, vararg spans: Any): RichTextBuilder {
+ val start = spannableBuilder.length
+ spannableBuilder.append(text)
+ val end = spannableBuilder.length
+
+ spans.forEach { span ->
+ spannableBuilder.setSpan(
+ span,
+ start,
+ end,
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+ )
+ }
+
+ return this
+ }
+
+ /**
+ * 完成构建并应用到TextView
+ */
+ fun build() {
+ text = spannableBuilder
+ }
+ }
+}
diff --git a/moduleUtil/src/main/res/drawable/bg_bttom_fff.xml b/moduleUtil/src/main/res/drawable/bg_bttom_fff.xml
new file mode 100644
index 0000000..4786b09
--- /dev/null
+++ b/moduleUtil/src/main/res/drawable/bg_bttom_fff.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/moduleUtil/src/main/res/layout/dialog_app_update.xml b/moduleUtil/src/main/res/layout/dialog_app_update.xml
index 68da3a9..be4e23c 100644
--- a/moduleUtil/src/main/res/layout/dialog_app_update.xml
+++ b/moduleUtil/src/main/res/layout/dialog_app_update.xml
@@ -52,7 +52,7 @@
android:layout_height="@dimen/dp_150"
app:layout_constraintTop_toTopOf="parent">
-