15 Commits

Author SHA1 Message Date
4a59bcd797 Merge remote-tracking branch 'master/dev-lxj-beta' into dev-lxj-beta 2025-11-12 11:44:39 +08:00
8080e476a5 1:上线版本修改 2025-11-12 11:43:26 +08:00
ee06345de7 Merge remote-tracking branch 'master/dev-lxj-beta' into dev-lxj-beta
# Conflicts:
#	moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt
2025-11-12 11:35:29 +08:00
ec58f46bf8 1:修改我的页面
2:添加爵位功能
2025-11-12 11:34:34 +08:00
c592da4d55 1:修改部分bug 2025-11-10 14:57:39 +08:00
f5aeeb88d7 1:修改服务器和H5的地址
2:修改上架版本
3:修改每日任务展示默认图
2025-11-06 14:42:01 +08:00
d0337a723c 1:修改部分BUG 2025-11-05 11:13:18 +08:00
6b9490cceb 1:修改交友房出现嘉宾会闭麦的情况 2025-11-03 20:29:52 +08:00
877ef5ea05 停止跟踪 2025-11-03 18:38:48 +08:00
771138d34c 修改练歌房 2025-11-03 18:37:58 +08:00
520bc8e1bb 修改图片 2025-11-03 18:34:07 +08:00
f5377127ce 1:修改交友房出现嘉宾会闭麦的情况 2025-11-03 10:08:58 +08:00
f4f04b59a8 1:添加权限说明
2:聊天添加举报按钮
2025-10-30 18:19:16 +08:00
a993a7710f 1:添加权限说明
2:聊天添加举报按钮
2025-10-30 18:13:59 +08:00
a5ebc83dea 1:修改pk房
2:修改页面跳转
2025-10-30 09:07:35 +08:00
2506 changed files with 20254 additions and 15563 deletions

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
.idea/
*.iml
build/
local.properties
.gradle/
.externalNativeBuild/
.DS_Store
*.dm
*.log

3
.idea/.gitignore generated vendored
View File

@@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

1
.idea/.name generated
View File

@@ -1 +0,0 @@
秘地

6
.idea/AndroidProjectSystem.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

10
.idea/deploymentTargetSelector.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

17
.idea/runConfigurations.xml generated Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@@ -1,837 +0,0 @@
<!-- saved from url=(0051)https://vespa.qxyushen.top//api/Page/page_show?id=4 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>.Po4BvhR1CK2tJaywJ6AN path {
fill: var(--icon-path-fill);
}
.Oz4yDjua3Qe6thqkZYf_ path {
transition: 0.2s all;
}
.Oz4yDjua3Qe6thqkZYf_:hover path {
fill: var(--icon-hover-fill);
}
</style>
<style>/* !!!切勿直接改动该文件,该文件由 generator.ts 自动生成!!! */
/* !!! DONT MODIFY THIS FILE DIRECTLY, THIS FILE IS GENERATED BY generator.ts AUTOMATICALLY !!! */
.ibW4Oa5B7s2zJKKZ4pCg {
user-select: none;
}
.AtqKyJetjrG4smuk35Np {
max-width: 346px;
width: auto;
height: 36px;
background-color: var(--quark-style-white-color, #fff);
padding-left: 10px;
padding-right: 4px;
display: flex;
align-items: center;
box-sizing: border-box;
border: 1px solid var(--quark-style-gray-20-color, rgba(6, 10, 38, 0.12));
box-shadow: 0 12px 32px -6px var(--quark-style-gray-30-fixed-color, rgba(6, 10, 38, 0.24));
border-radius: 10px;
}
.ibW4Oa5B7s2zJKKZ4pCg .g6iGsZa_KHMeW2yICzQQ {
height: 28px;
display: flex;
align-items: center;
margin-right: 6px;
}
.ibW4Oa5B7s2zJKKZ4pCg .e4UXx38MPgfHdym_Lzt0 {
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
height: 28px;
padding: 0 6px;
margin-right: 2px;
border-radius: 6px;
column-gap: 4px;
}
.ibW4Oa5B7s2zJKKZ4pCg .e4UXx38MPgfHdym_Lzt0:hover:not(.ibW4Oa5B7s2zJKKZ4pCg .kNOcXLDT_cCrcoY8LTm8) {
background: var(--quark-style-gray-10-color, rgba(6, 10, 38, 0.06));
}
.ibW4Oa5B7s2zJKKZ4pCg .kNOcXLDT_cCrcoY8LTm8 {
cursor: default;
}
.ibW4Oa5B7s2zJKKZ4pCg .kNOcXLDT_cCrcoY8LTm8 .Va3czASiR9Zztyl_lD4M {
color: var(--quark-style-gray-40-color, rgba(6, 10, 38, 0.4)) !important;
}
.ibW4Oa5B7s2zJKKZ4pCg .e4UXx38MPgfHdym_Lzt0 .Va3czASiR9Zztyl_lD4M {
font-size: 12px;
color: var(--quark-style-gray-color, #060A26);
line-height: 16px;
white-space: nowrap;
position: relative;
}
.ibW4Oa5B7s2zJKKZ4pCg .llw0qsmiI_08u93bFdNg {
position: relative;
width: 28px;
height: 28px;
overflow: visible !important;
}
.ibW4Oa5B7s2zJKKZ4pCg .LEo8kpqIERehkv8AhAfG {
width: 28px;
height: 28px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
border-radius: 6px;
overflow: visible !important;
}
.ibW4Oa5B7s2zJKKZ4pCg .LEo8kpqIERehkv8AhAfG:hover {
background: var(--quark-style-gray-10-color, rgba(6, 10, 38, 0.06));
}
.ibW4Oa5B7s2zJKKZ4pCg .zoNmooxAnbLEJSN8m1Jg {
box-sizing: border-box;
position: absolute;
display: flex;
flex-direction: column;
align-items: center;
width: 110px;
max-height: 136px;
height: auto;
top: 36px;
right: -5px;
padding: 4px 0;
background-color: var(--quark-style-white-color, #fff);
border: 1px solid var(--quark-style-gray-20-color, rgba(6, 10, 38, 0.12));
box-shadow: 0 4px 16px -6px var(--quark-style-gray-20-fixed-color, rgba(6, 10, 38, 0.12));
border-radius: 8px;
overflow: visible !important;
row-gap: 4px;
}
.ibW4Oa5B7s2zJKKZ4pCg .O1imPofna4elG_8NcQnR {
top: -77px;
}
.ibW4Oa5B7s2zJKKZ4pCg .mdH0IY7jS3Swn5vdX6tz {
width: 102px;
height: 28px;
display: flex;
align-items: center;
justify-content: flex-start;
cursor: pointer;
column-gap: 8px;
border-radius: 6px;
padding: 0 6px;
box-sizing: border-box;
}
.ibW4Oa5B7s2zJKKZ4pCg .mdH0IY7jS3Swn5vdX6tz:hover:not(.ibW4Oa5B7s2zJKKZ4pCg .dEdHLVmn_L2GAzb_cmwt) {
background: var(--quark-style-gray-10-color, rgba(6, 10, 38, 0.06));
}
.ibW4Oa5B7s2zJKKZ4pCg .dEdHLVmn_L2GAzb_cmwt {
cursor: default;
}
.ibW4Oa5B7s2zJKKZ4pCg .dEdHLVmn_L2GAzb_cmwt .zEraruudgjR2MToGu4Kw {
color: var(--quark-style-gray-40-color, rgba(6, 10, 38, 0.4)) !important;
}
.ibW4Oa5B7s2zJKKZ4pCg .XfCMwvO0DsqFCeyzPYP2 {
width: 16px;
height: 16px;
}
.ibW4Oa5B7s2zJKKZ4pCg .zEraruudgjR2MToGu4Kw {
font-size: 12px;
color: var(--quark-style-gray-color, #060A26);
}
.ibW4Oa5B7s2zJKKZ4pCg .KZeoAuXbMIkWzOT4PcH5 {
width: 100%;
height: 1px;
background: var(--quark-style-gray-10-color, rgba(6, 10, 38, 0.06));
}
.ZL32C_XdLL8UQRZ3zObd {
display: flex;
align-items: center;
}
.u5llx7cIQZLdrjP5Vag1 {
width: 28px;
height: 28px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 16px;
cursor: pointer;
margin-right: 12px;
background: var(--quark-style-gray-60-color, rgba(6, 10, 38, 0.6));
}
.ZL32C_XdLL8UQRZ3zObd .LEo8kpqIERehkv8AhAfG {
border-radius: 16px !important;
background: var(--quark-style-gray-60-color, rgba(6, 10, 38, 0.6)) !important;
}
.ZL32C_XdLL8UQRZ3zObd .zoNmooxAnbLEJSN8m1Jg {
right: 0 !important;
}
.ZL32C_XdLL8UQRZ3zObd {
overflow: visible !important;
}
</style>
</head>
<body><p><strong>羽声语音直播隐私保护政策</strong></p>
<p><strong>本版本更新日期2025年【10】月【27】日</strong></p>
<p><strong>本版本生效日期2025年【10】月【27】日</strong></p>
<p><strong>引言:</strong></p>
<p style="text-align: left;"><strong>“羽声语音”APP 的运营主体系陕西启星汇申网络科技有限公司(以下简称“我们”&amp;
”羽声”)深知个人信息对您的重要性,并会尽力保护您的个人信息安全可靠,我们致力于维持您对我们的信任,恪守以下原则,保护您的个人信息:权责一致原则,目的明确原则,选择同意原则,最少够用原则,确保安全原则,主体参与原则,公开透明原则等。同时我们承诺,我们将按业界成熟的安全解决方案,采取相应的安全保护措施来保护您的个人信息。鉴此,我们制定本《隐私政策》(下称“本政策
/ 本隐私政策”)并提醒您: 本政策适用于羽声语音语音软件及相关服务。
需要特别说明的是,本政策不适用于其他第三方向您提供的服务,也不适用于已另行独立设置隐私权政策的产品或服务。
在使用羽声语音语音软件或服务前,请您务必仔细阅读并透彻理解本政策,特别是以粗体/粗体下划线标识的条款,您应重点阅读,在确认充分理解并同意后使用相关产品或服务。若您拒绝本政策,仅能进入访客态进行浏览。为保障软件及服务的安全运行,呱友在相应功能点触发时会收集相关设备信息及权限。如对本政策内容有任何疑问、意见或建议,您可通过呱友提供的各种联系方式与我们联系。
我们非常重视用户个人信息的保护,并且将以勤勉和审慎的义务对待这些信息。您在下载、安装、开启、浏览、注册、登录、使用(以下统称“使用”)本公司软件及相关服务时,本公司将按照本《隐私政策》收集、保存、使用、共享、披露及保护您的个人信息鉴此,我们希望通过本《隐私政策》向您介绍我们对您个人信息的处理方式并提醒您:
在使用“羽声”各项产品或服务前,请您留意重点阅读。若您认为本协议中的加粗条款可能会导致您的部分或全部权利或权益受损,请您务必再次仔细阅读,在确保您已经理解、接受了加粗条款的前提下,继续使用本公司服务。如对本政策内容有任何疑问、意见或建议,您可通过提供的各种联系方式与我们联系。</strong>
</p>
<p><strong>本政策将帮助您了解如下内容:</strong></p>
<p><strong>一、定义及适用范围</strong></p>
<p><strong>二、我们如何收集和使用您的个人信息</strong></p>
<p><strong>三、我们如何使用Cookie和第三方H5页面</strong></p>
<p><strong>四、我们如何共享、转让、公开披露您的个人信息</strong></p>
<p><strong>五、我们如何存储和保护您的个人信息</strong></p>
<p><strong>六、您如何管理您的个人信息</strong></p>
<p><strong>七、未成年人保护</strong></p>
<p><strong>八、本政策的更新</strong></p>
<p><strong>九、联系我们</strong></p>
<p><strong>十、其他</strong></p>
<p><strong>【特别提示】请您在使用我们各项产品或服务前,仔细阅读并透彻理解本政策,特别是以粗体/下划线/粗体下划线等有特殊标识的条款,您应重点阅读,在确认充分理解并同意后使用相关产品或服务。如果您不同意我们收集您的任何个人信息,您应当立即停止使用并退出羽声语音直播。当您使用或继续使用我们的产品或服务时,即表示您同意我们按照本政策来处理您的相关信息。</strong>
</p>
<p>
<strong>如对本政策内容有任何疑问,您可以通过本政策中“联系我们”一节提供的联系方式与我们联系。</strong>
</p>
<p><strong>一、定义及适用范围</strong></p>
<p><strong>(一)定义</strong></p>
<p><strong>1、羽声语音软件及相关服务指由陕西启星汇申网络科技有限公司陕西省咸阳市高新技术产业开发区高科三路科技企业孵化园3栋4层
及其关联方通过合法拥有并运营的、标注名称为羽声语音、羽声语音极速版的客户端应用程序、APP、微信小程序、微信公众号、羽声语音官方网站 </strong><u>https://golden-llama-1g494r.mysxl.cn/</u>
<strong>、通过APK、SDK、API等方式向您提供的软件和/或服务及随技术发展出现的新形态向您提供的产品与服务。</strong>
</p>
<p><strong>2、关联方</strong><span style="color: rgb(51, 51, 51);">:指在现在、将来控制</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">陕西启星汇申网络科技有限公司</span><span
style="color: rgb(51, 51, 51);">、受</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">陕西启星汇申网络科技有限公司</span><span
style="color: rgb(51, 51, 51);">控制或与</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">陕西启星汇申网络科技有限公司</span><span
style="color: rgb(51, 51, 51);">处于共同控制下的公司、机构。</span></p>
<p><strong>3、未成年人</strong><span style="color: rgb(51, 51, 51);">:指不满十八周岁的自然人。十六周岁以上的未成年人,以自己的劳动收入为主要生活来源的,视为完全民事行为能力人。</span>
</p>
<p><strong>4、儿童</strong><span style="color: rgb(51, 51, 51);">:指不满十四周岁的未成年人。</span>
</p>
<p><strong>(二)适用范围</strong></p>
<p>
<strong>本政策适用于羽声语音的产品或服务。如我们关联公司的产品或服务中使用了羽声语音直播提供的产品或服务,则本政策同样适用于该部分产品或服务。但请您注意,本政策不适用于以下情况:</strong>
</p>
<p><span
style="color: rgb(51, 51, 51);">1、为我们的产品或服务提供广告服务的第三方的信息收集/处理做法;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2、我们的产品或服务可能会包含或链接至第三方提供的信息与/或第三方服务(包括任何第三方应用、网站、产品、服务等),这些信息与/或服务由第三方负责运营,具体规则请参照该第三方的隐私政策或类似声明;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">3、其他非</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音</span><span
style="color: rgb(51, 51, 51);">向您提供的产品与/或服务内容。</span></p>
<p><strong>二、我们如何收集和使用您的个人信息</strong></p>
<p><span style="color: rgb(51, 51, 51);">我们收集和使用的您的个人信息类型包括两种:第一种:我们产品与/或服务的基本业务功能所必需的信息:此类信息为产品与/或服务正常运行的必备信息,您须授权我们收集。如您拒绝提供,您将无法正常使用我们的产品与/或服务;第二种:拓展业务功能可能需要收集的信息:此信息为非基本业务功能所需的信息,您可以选择是否授权我们收集。如您拒绝提供,将导致拓展业务功能无法实现或无法达到我们拟达到的效果,但不影响您对基本业务功能的正常使用。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">我们在此特别提醒您:我们致力于打造多样的产品和服务以满足您的需求。因我们向您提供的产品和服务种类众多,且不同用户选择使用的具体产品/服务范围存在差异,故基本/拓展功能及对应收集使用的个人信息类型、范围等会有所区别,请以具体的产品/服务功能为准。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">我们收集和使用您的个人信息的场景有:</span></p>
<p><strong>(一)注册成为我们的用户</strong></p>
<p><span style="color: rgb(51, 51, 51);">当您在</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">上创建</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">账号时,您需要提供您</span><strong>本人的实名手机号码、验证码</strong><span
style="color: rgb(51, 51, 51);">并完善相关的网络身份识别信息(包括</span><strong>头像、昵称、登录密码、性别、生日</strong><span
style="color: rgb(51, 51, 51);">)。</span><strong>您需理解手机号码、验证码匹配结果、性别、生日均属于您的敏感个人信息我们收集您的手机号码、验证码是基于法律法规的相关要求。其中1实名手机号码、验证码是为了验证您的身份满足相关法律规定的网络实名制要求2生日是为了协助判断您是否为年满十八周岁的成年人若您是未成年人我们将不对您提供服务请您谅解也提请您按真实情况填写相应信息切勿虚构、假冒3性别是为了向您提供性别匹配服务。上述敏感个人信息您有权拒绝提供但将无法使用相关功能或服务请您谨慎考虑后再选择是否提供。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">在您注册账号后,您可以根据自身需求选择</span><strong>填写学校、个性签名、家乡、兴趣爱好等个人主页信息,来帮助您更加形象的展示自我</strong><span
style="color: rgb(51, 51, 51);">。但如果您不提供这些信息,将不会影响本服务的基本业务功能。</span><strong>您在个人主页发布的上述信息、动态、添加的兴趣标签、游戏名片以及你的账号等级、ID号、获赞数、粉丝数将会在账号包括APP和微信小程序的个人主页中公开展</strong><span
style="color: rgb(51, 51, 51);">您也可以通过APP设置-隐私进行信息隐藏(不对未关注用户显示可见)或通过第六节所述管理您的个人信息。</span>
</p>
<p><strong>(二)进行实名认证</strong></p>
<p><span style="color: rgb(51, 51, 51);">1、为满足相关法律规定及监管要求、确保用户身份真实性、实现反欺诈等风控、保障系统与服务安全包括依法保护未成年人合法权益、用户权益发放、打击电信网络诈骗等需要当您使用</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">中某些特定类型的产品与/或服务,</span><strong>您需要向平台提供您本人的真实姓名及身份证号码信息(敏感个人信息),并可能需要通过您的人脸信息(敏感个人信息)进行身份一致性核验</strong><span
style="color: rgb(51, 51, 51);"></span></p>
<p><span style="color: rgb(51, 51, 51);">1在您进行实名认证时</span><strong>若您选择或产品页面进入火山引擎、腾讯云等第三方的实名认证程序(人脸识别功能),我们及/或第三方会申请、调用终端设备的摄像头权限来采集您的面部识别信息在您授权后前述第三方实名认证程序将通过SDK方式获取您的如下敏感个人信息姓名、身份证件号码、人脸信息指为验证或识别您的身份而采集的人脸图像、视频以及基于上述图像、视频提取的面部识别特征为了准确验证您的身份第三方需将上述信息与其合法存有的如基于法律法规或政府部门、有权机关授权或存储您的个人信息进行比对核验。为了验证实名认证结果的有效性并及时解决用户就实名认证结果的争议或投诉您通过以上方式实名认证的第三方会向我们返回人脸识别验证结果以及为验证或识别您的身份而采集的部分人脸图像、视频具体以第三方提供为准此为您的敏感个人信息除此外我们会存储您在上述实名认证过程中主动填写的姓名、身份证号码敏感个人信息</strong>
</p>
<p><strong>当您通过本平台主动选择进行真人头像认证时经您同意后我们会收集您上传的头像照片为了验证您上传的头像照片为您本人不存在冒用或盗用他人照片、头像的情形我们将请求您按上述方式通过第三方人脸识别程序完成实名认证经第三方反馈验证一致的您上传的头像照片将作为您在羽声语音直播APP内的头像进行公开具体规则请见《真人头像认证协议》。因此我们在此提醒您谨慎使用真人头像认证功能您有权拒绝且您拒绝不影响您继续使用本平台的基本业务功能。</strong>
</p>
<p>
<strong>具体使用的第三方人脸识别程序可通过第四节第(一)条所列《羽声语音直播与第三方共享个人信息清单》查阅。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">2若您无法通过上述程序完成实名认证您可以选择通过人工认证方式完成实名认证程序为了完成实名认证服务我们将依据相关法律法规获取并存储您的个人身份信息包括如下</span><strong>姓名(敏感个人信息)、身份证件类型(包括但不限于相应的身份证、护照、台湾居民来往大陆通行证、港澳居民往来内地通行证等)和相应的证件正反面图片(敏感个人信息)、您手持相应身份证件的照片(敏感个人信息)。</strong>
</p>
<p><strong>提请您特别注意,您的身份证件信息、您手持身份证件的照片、真人照片、人脸信息均属于敏感个人信息,您可以拒绝提供,如果拒绝提供您将可能无法获得需要实名认证的特定服务,但不影响您正常使用产品的基本业务功能(包括产品的浏览和观看功能);同时,我们将依法记录、保存验证身份信息及验证结果,这些信息仅供完成验证目的,或者其他法律法规所规定的用途,未经您明示授权不会用作其他目的。</strong>
</p>
<p><strong>2、具体实名场景及对应服务主要包括具体以您使用的功能为准</strong></p>
<p><span
style="color: rgb(51, 51, 51);">1当您申请注册为互联网发布者主播、开设个人房时</span><strong>需要提供您的真实姓名、身份证件信息(敏感个人信息)进行实名身份认证,并通过您的面部识别信息(敏感个人信息)进行身份一致性核验</strong><span
style="color: rgb(51, 51, 51);">。通过验证后,您方可在平台上从事直播发布活动。如果您拒绝提供上述信息(您有权拒绝),您将可能无法获得相关服务(开播或开设个人房间),但不影响您正常使用产品的浏览和观看功能。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2当您通过</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">进行充值、消费时(</span><strong>特别是当您使用下单功能时</strong><span
style="color: rgb(51, 51, 51);">),为了保证您的资金安全,避免未成年人使用下单功能,我</span><strong>们可能需要您提供您的真实姓名、身份证件信息(敏感个人信息)进行实名身份认证,并可能需要您通过您的面部识别信息(敏感个人信息)进行身份一致性核验</strong><span
style="color: rgb(51, 51, 51);">。前述信息您可以拒绝提供,您拒绝提供前述信息的,只会使您无法使用</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">对应功能,但不影响您使用其他功能。</span></p>
<p><span style="color: rgb(51, 51, 51);">3当您使用提现功能</span><strong>们会需要您绑定银行卡账号信息、支付宝账号、身份证号码、姓名(敏感个人信息)进行实名认证。在您授权后,我们可能需要通过您的面部识别信息(敏感个人信息)进行身份一致性核验</strong><span
style="color: rgb(51, 51, 51);">。您可以拒绝提供前述信息,但您拒绝提供将导致您无法使用对应功能,但不影响您使用</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">的其他功能。</span></p>
<p><span
style="color: rgb(51, 51, 51);">4在账号冻结、封禁申诉时为了核实争议账号是您本人持有平台还将使用您注册时使用的</span><strong>实名手机号码、身份证件信息(敏感个人信息)进行身份核实认证</strong><span
style="color: rgb(51, 51, 51);"></span></p>
<p><span
style="color: rgb(51, 51, 51);">5基于依法保护未成年人权益的需求我们为未成年人提供了青少年模式若您拟解除、退出青少年模式我们会需要您提</span><strong>供真实姓名、身份证件信息(敏感个人信息),并在您授权后,我们可能需要通过您的面部识别信息进行身份一致性核验</strong><span
style="color: rgb(51, 51, 51);">。如果您拒绝提供前述信息,您将无法退出青少年模式,但不影响您在青少年模式下使用</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">产品和服务。</span></p>
<p><strong>(三)为您提供服务内容的浏览/播放/搜索/下载</strong></p>
<p><span style="color: rgb(51, 51, 51);">1、</span><strong>当您进行直播间、聊天室、视频、音频等服务内容的浏览、播放、下载功能时,为与您的移动设备进行必要的适配,向您提供连续性、一致化的使用体验以及最优化的页面展示,我们需要收集您的设备信息、个人上网记录。</strong>
</p>
<p><strong>设备信息包括浏览器类型、设备型号、操作系统版本、设备设置、DEVICEID、AndroidID、MAC地址、IMEI、IDFA、OAID、ICCID、UDID、UUID、MEID及其他设备标识符、设备环境。</strong>
</p>
<p><strong>个人上网记录包括:浏览/点击/播放记录、收藏/关注/预约记录、点赞/分享/发布记录等。</strong></p>
<p><span style="color: rgb(51, 51, 51);">我们收集这些信息是为了向您提供直播间、视频、音频等内容的浏览、播放和展示服务,如您拒绝提供上述权限将可能导致您无法使用我们的相关产品与服务。请您理解,单独的设备信息、日志信息是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">2、当您使用我们提供的搜索功能时我们还会收集您搜索的关</span><strong>键字信息、设备信息包括设备型号、操作系统版本、设备设置、AndroidID、MAC地址、IMEI、IDFA、OAID、ICCID等设备标识符、设备环境、日志信息包括您的浏览记录和时间、您搜索的时间以及次数</strong><span
style="color: rgb(51, 51, 51);">。我们收集这些信息是为了方便您后续查找时无需再次输入,并向您快速匹配您所需要的内容以及您可能感兴趣的内容,为了提供高效的搜索服务,部分前述信息会暂时存储在您的本地存储设备之中,并可向您展示搜索结果内容、搜索历史记录。您可以自主删除前述搜索记录。搜索的关键词信息通常无法单独识别您的个人身份,不属于您的个人信息,不在本政策的限制范围内。但当您的搜索关键词信息与您的其他信息有联结并可识别您的个人身份时,在结合使用期间,我们会将您的搜索关键词信息作为您的个人信息,与您的搜索历史记录一同按照本政策对其进行处理与保护。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">当您分享/接收被分享的信息时,我们会在您进入</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">时访问您的剪切板,写入或读取其中包含的文字、链接、口令、分享码,以实现分享、跳转功能。我们不会收集、存储剪切板的其他信息。</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">3、当您使用下载功能时经您同意后我们会访问您的</span><strong>存储权限</strong><span
style="color: rgb(51, 51, 51);">,以便在您设备外置存储空间内写入相关文件。如您拒绝提供,仅会使您无法使用该功能,但并不影响您正常使用产品或服务的其他功能。同时,您也可以随时通过您设备的相关功能设置开启/取消该权限。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">(五)</span><strong>帮助您上传或发布图文、音频和视频</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">1、若您通过</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">的社区功能或通过</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">的评论、分享、发帖、发布动态等功能上传/发布/编辑图文、音频、视频时,当您使用到具体功能时,我们将向您分别单独请求</span><strong>访问您设备的相机/摄像头权限、相册权限IOS端/存储权限(安卓端)、录音/麦克风权限1经您同意授权相机/摄像头权限后,我们会访问您的相应权限,以便您拍摄照片、视频,并采集、识别上述功能实现过程中所拍摄或录制的图片及视频信息</strong><span
style="color: rgb(51, 51, 51);"></span><strong>2经您同意授权相册权限IOS端/存储权限(安卓端)后,我们会访问您的相应权限,以便您查看、选择相册里的图片/视频发布动态、反馈意见,设置与更换头像、封面,聊天时分享图片/视频,以及保存图片/视频至相册您还可以在其他场景访问设备里的照片、音频和视频以及保存内容到设备3经您同意授权录音/麦克风权限后,我们会访问您的相应权限,以便识别您上传的语音信息,并采集、识别上述功能实现过程中所录制、输入的音频信息。如您拒绝提供上述权限的仅会使您无法使用该功能,但并不影响您正常使用产品/服务的其他功能,同时,您也可以随时通过您的设备系统或使用我们的产品/服务的相关功能设置页面开启/取消该权限。</strong>
</p>
<p><span
style="color: rgb(51, 51, 51);">2、如您自愿填写信息或自愿发布内容的我们会收集您上传的</span><strong>视频、照片、音视频、帖子、评论、点赞、关注、分享信息、浏览及搜索信</strong><span
style="color: rgb(51, 51, 51);">息。您可随时删除您发布的照片、音视频、帖子及评论内容。为了验证您发布内容的合法合规性,避免您发布的内容涉及违法或侵犯第三方合法权益的情形。您</span><strong>同意我们为了上述目的将您发布的图文、音频、视频内容提供给我们的服务提供商,并由我们的服务提供商对上述内容进行审核、标注后向我们反馈结果。</strong><span
style="color: rgb(51, 51, 51);">我们不会向上述服务商传输或共享您的个人信息,我们仅会对您发布内容的合法合规性进行审核。</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">3、当您使用设备相机扫描二维码时我们将访问您设备的</span><strong>相机/摄像头权限</strong><span
style="color: rgb(51, 51, 51);">。如您拒绝提供的仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。同时,您也可以随时通过您的设备的设置开启/取消该权限。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">4、您在使用动态发布等功能时发布的公开信息可能涉及您或他人的个人信息或个人隐私信息如您在分享、评论时选择上传的包括个人信息的图片或视频。</span><strong>您应更为谨慎考虑是否公开该等信息,以及获得合法权利人授权后再行发布,同时如该等信息中涉及未成年人个人信息的,您应在发布前征得其监护人同意。</strong>
</p>
<p><strong>(六)录制音视频及提供直播功能</strong></p>
<p><span
style="color: rgb(51, 51, 51);">当您使用录制音视频、使用个人房间服务以及直播服务时,经您分别授权我们将</span><strong>访问您设备的相机/摄像头权限(当您同意开启此项权限后,我们会使用您设备上的相机拍摄功能。此项功能将用于实现照片拍摄、录制视频功能,并采集、识别上述功能实现过程中所拍摄或录制的图片及视频信息)、录音(麦克风)相关权限(当您同意开启此项权限后,我们会使用您设备上的麦克风功能,并会识别您上传的语音信息。此项权限将用于实现语音输入功能,并采集、识别上述功能实现过程中所输入的语音信息)</strong><span
style="color: rgb(51, 51, 51);">,如您拒绝授权的仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。同时,您也可以随时通过您的设备设置开启/取消该权限。此外,</span><strong>为保证您使用直播或聊天室功能时的流畅度、节省您的流量,我们会收集您使用该功能时段内使用流量的大小。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">(七)消费与提现</span></p>
<p><span style="color: rgb(51, 51, 51);">当您通过</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音</span><span
style="color: rgb(51, 51, 51);">购买商品和/或服务时如SVIP会员购买、购买虚拟商品、个性装扮、礼物为帮助您完成交易、保障交易安全、提供订单查询、客服及售后服务</span><strong>我们需要根据商品的类型收集如下部分或全部的订单信息:下单时间、订单编号、订单状态、交易的商品信息、支付信息(支付金额、支付方式、支付流水号、支付状态、第三方支付渠道的支付账号,敏感个人信息)、虚拟商品消费使用记录、会员开通时间</strong><span
style="color: rgb(51, 51, 51);">。为此为保障您的账户和资金安全以及支付服务的安全稳定运行、履行反电信网络诈骗等法定义务我们还会收集您必要的设备信息IP地址并提供给您选择的第三方支付渠道。为向您提供售后与争议解决服务之目的我们需要及时获悉并确认交付、售后的进度及状态您同意我们可自相应第三方处收集与交付、售后进度相关的信息。我们向您承诺我们会以最大努力保障您的个人信息安全并严格要求第三方对您的个人信息保密只以交付、售后之目的获悉和使用不得对外泄露或做其他任何用途。您可以拒绝提供前述信息但您拒绝提供将导致您无法使用对应功能但不影响您使用</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">的基本业务功能。</span></p>
<p><span style="color: rgb(51, 51, 51);">当您使用提现功能时,</span><strong>为了完成支付结算,我们会收集、使用您主动填写的收款账户信息(银行卡账号信息及开户行信息、支付宝账号及/或微信账号,具体以您填写为准)以及身份证号码、姓名,并会共享给第三方支付结算机构(请见第四节第(一)项)。前述信息为敏感个人信息,您可以拒绝提供,您拒绝提供将导致您无法使用对应提现功能,但不影响您使用羽声语音直播的其他功能。</strong>
</p>
<p><strong>(八)客户服务</strong></p>
<p><strong>当您主动填写羽声语音APP上的反馈意见如帮助与反馈-意见反馈页面)、举报投诉页面时,我们会收集您主动填写的手机号、反馈/举报投诉内容(请谨慎考虑后再决定是否填写),我们收集信息仅用于收集您的意见,便于与您联系、尽快帮助您解决问题。</strong>
</p>
<p><span
style="color: rgb(51, 51, 51);">当您向我们发起投诉、申诉或进行咨询时,为了保障您的账户及系统安全,</span><strong>我们需要您提供必要的个人信息(包括账号信息、姓名、手机号、身份证以及其他必要身份信息)以核验您的用户身份</strong><span
style="color: rgb(51, 51, 51);">。为</span><strong>便于与您联系、尽快帮助您解决问题或记录相关问题的处理方案及结果,我们可能会收集您与我们的沟通信息(包括文字/图片/音视频/通话记录形式)、您为了证明相关事实提供的信息、与客服需求相关联的其他必要信息。如您针对具体的订单发起客服需求的,我们还会使用您的订单信息。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">以上信息为您的</span><strong>个人敏感信息</strong><span
style="color: rgb(51, 51, 51);">,您有权拒绝提供,但我们收集这些信息是为了调查事实与帮助您解决问题,如您拒绝提供上述信息,我们可能无法向您及时反馈投诉、申诉或咨询结果。</span>
</p>
<p><strong>(九)为您提供安全保障服务</strong></p>
<p><span style="color: rgb(51, 51, 51);">为了使</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">产品及服务与您的移动设备进行必要的适配,提高您使用我们及我们合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免受侵害,更好的预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络入侵等安全风险,分析当前设备的风险等级,有效识别各种作弊行为、风险设备、恶意刷量、恶意程序、保护您的账号安全,我们会收集为实现安全保障功能的必要信息,我们会获取您的以下信息:</span>
</p>
<p><strong>1、网络访问日志信息和用户日志信息。包括网络信息如网络类型、运营商信息如SIM卡信息、账号信息如账号登录地以及使用“羽声语音直播”产品或服务的频率、崩溃数据、总体安装、使用情况、性能数据、服务故障等信息。</strong>
</p>
<p><strong>2、您的设备信息。包括设备型号、操作系统、设备序列号/SN、设备标识符如IMEI/IMSI/Android
ID/IDFA/OpenUDID/GUID/ICCID/
UUID/MEID/DEVICEID、设备MAC地址、应用列表、登陆IP地址、软件版本号、接入网络的方式、类型和状态、设备当前运行进程/运行中进程信息、设备传感器信息、蓝牙信息屏幕尺寸等参数信息同时为了保证您的账号安全我们会检测您设备的root状态</strong><span
style="color: rgb(51, 51, 51);">。请您注意为了便于您及时接收、发送聊天消息、接收消息通知我们会在后台状态下获取您设备的MAC地址。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">我们可能会使用或整合您的上述日志信息与设备信息、账户信息、交易信息、支付信息以及其他取得您授权或依据法律共享的信息,综合判断您账户及交易风险、完成身份验证、检测,防范安全事件,并依法采取必要的记录、审计、分析、处置措施,保护各方合法权益稳定不受侵害。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">您理解并同意为了帮助我们进行bug分析、反作弊、反黑产等安全保护工作保障您正常使用本产品与/或服务、保障您的账号安全,</span><strong>在您的羽声语音App每次切换至后台或处于静默状态下或重新启动时我们会收集您的Mac地址信息包括手机Mac地址和蓝牙Mac地址、IMEI、获取运行中进程信息、设备序列号、Android
ID、DEVICEID我们将把读取频次控制在合理范围内。</strong></p>
<p><strong>请您理解,单独的设备信息、日志信息等是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。</strong>
</p>
<p><strong>同时为了维护网络安全、保障良好生态便于公众为公共利益实施监督依据《互联网用户账号信息管理规定》等法律规定您的IP地址所对应的归属地域信息将会展示在您的个人资料页。境内展示到省区、市境外展示到国家或地区信息以网络运营商数据为准请您理解该信息不会泄露您的详细地址相关展示暂不支持手动开启或关闭。</strong>
</p>
<p><strong>(十)我们获取的设备权限</strong></p>
<p><span style="color: rgb(51, 51, 51);">为确保相关业务功能的正常实现,我们需要根据具体的使用场景调用对应的必要权限。请您注意,您开启任一权限即代表您授权我们可以收集和使用相关个人信息来为您提供对应服务,若您关闭任一权限或取消授权,我们将不再基于对应权限继续收集和使用相关个人信息,也无法为您提供该权限所对应的服务。但是,您关闭权限的决定不会影响此前基于您的授权所进行的信息收集及使用。</span>
</p>
<p><strong>(十一)收集和使用个人信息的其他规则</strong></p>
<p><span
style="color: rgb(51, 51, 51);">1、若您提供的信息中含有其他用户的个人信息在向我们提供这些个人信息之前您需确保您已经取得合法的授权。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2、您理解并知悉您向外部第三方</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">关联公司不在此限)</span><strong>提供的个人信息或外部第三方收集的您的个人信息我们无法获取更不会使用非常规方式恶意干预对方系列APP数据擅自以软件程序获得您的个人信息。羽声语音直播可能因业务发展的需要而确实需要从第三方间接收集如共享等您的个人信息的且由我们直接或共同为您提供产品或服务的我们会在收集前明确以书面形式要求该第三方说明其个人信息来源以及是否已经就其收集、处理以及向我们提供您的个人信息取得了您的合法授权如果使用方式和范围超出您在第三方原授权范围的我们会再次征得您的授权同意。我们的某些产品或服务由第三方业务合作伙伴提供或共同提供时为了必要且合理的开展业务我们可能会从部分业务合作伙伴处间接收集的您的部分信息、其他方使用我们的产品/服务时所提供有关您的信息。如果第三方的授权范围无法涵盖我们的处理和使用目的时,我们会自行或者要求该第三方征得您的同意后再行处理您的个人信息。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">3、如果某一需要收集您的个人信息的产品/服务未能在本隐私政策中予以说明的,或者我们超出了与收集您的个人信息时所声称的目的及具有直接或合理关联范围的,我</span><strong>们将在收集和使用您的个人信息前,通过更新本隐私政策、页面提示、弹窗、站内信、网站公告或其他便于您获知的方式另行向您说明,并为您提供自主选择同意的方式,且在征得您明示同意后收集和使用。</strong>
</p>
<p><strong>4、征得授权同意的例外</strong></p>
<p><strong>您理解并同意,在以下情况下,我们无需取得您的授权同意即可收集和使用您的个人信息:</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">1与国家安全、国防安全有关的</span></p>
<p><span style="color: rgb(51, 51, 51);">2与公共安全、公共卫生、重大公共利益有关的</span></p>
<p><span style="color: rgb(51, 51, 51);">3与犯罪侦查、起诉、审判和判决执行等有关的</span></p>
<p><span
style="color: rgb(51, 51, 51);">4出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的</span>
</p>
<p><span style="color: rgb(51, 51, 51);">5所收集的个人信息是您自行向社会公众公开的</span></p>
<p><span style="color: rgb(51, 51, 51);">6从合法公开披露的信息中收集个人信息的如合法的新闻报道、政府信息公开等渠道并依照《个人信息保护法》规定在合理的范围内处理您自行公开或者其他已经合法公开的个人信息</span>
</p>
<p><span style="color: rgb(51, 51, 51);">7根据您的要求签订合同所必需的</span></p>
<p><span
style="color: rgb(51, 51, 51);">8用于维护所提供的产品或服务的安全稳定运行所必需的例如发现、处置产品或服务的故障</span>
</p>
<p><span style="color: rgb(51, 51, 51);">9为合法的新闻报道所必需的</span></p>
<p><span style="color: rgb(51, 51, 51);">10学术研究机构基于公共利益开展统计或学术研究所必要且对外提供学术研究或描述的结果时对结果中所包含的个人信息进行去标识化处理的</span>
</p>
<p><span style="color: rgb(51, 51, 51);">11法律法规规定的其他情形。</span></p>
<p><span style="color: rgb(51, 51, 51);">我们需要特别提醒您的是:</span><strong>由于我们的产品和服务较多,为您提供的内容也不同,因此收集的您的个人信息也会因产品/服务的内容不同而有所区别,具体以产品/服务实际提供为准。我们可能会不时推出新的或优化后的功能,或者依据最新法律法规要求,可能需要收集、使用您的新的个人信息或变更个人信息使用目的或方式。届时,我们将通过更新本政策、弹窗、页面提示等方式另行向您说明并为您提供自主选择同意的方式,且在征得您同意后再收集、使用。</strong>
</p>
<p><strong>三、我们如何使用Cookie和第三方H5页面</strong></p>
<p><span style="color: rgb(51, 51, 51);">为使您获得更轻松的访问体验,您使用</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">产品或服务时,我们可能会通过采用各种技术收集和存储您访问</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">服务的相关数据,在您访问或再次访问</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">服务时,我们能识别您的身份,并通过分析数据为您提供更好更多的服务。包括使用小型数据文件识别您的身份,这么做是为了解您的使用习惯,帮您省去重复输入账户信息的步骤,或者帮助判断您的账户安全。这</span><strong>些数据文件可能是Cookie、Flash
Cookie或您的浏览器或关联应用程序提供的其他本地存储统称“Cookie”</strong></p>
<p><span style="color: rgb(51, 51, 51);">网页上常会包含一些电子图像称为“单像素GIF文件”或“网络beacon”它可以帮助网站计算浏览网页的用户或访问某些cookie。我们会通过网络beacon收集您浏览网页活动信息例如您访问的页面地址、您先前访问的援引页面的位址、您停留在页面的时间、您的浏览环境以及显示设定等。</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">如果您的浏览器或浏览器附加服务允许您可以修改对Cookie的接受程度或者拒绝</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">的Cookie在浏览器具备该功能的前提下可以通过您的浏览器的设置以管理、部分或全部拒绝Cookie与/或同类技术或删除已经储存在您的计算机、移动设备或其他装置内的Cookie与/或同类技术,从而实现我们无法全部或部分追踪您的个人信息。您如需详细了解如何更改浏览器设置,请具体查看您使用的浏览器的相关设置页面),但拒绝</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">的Cookie可能无法使用由我们提供的、依赖于Cookie的功能或服务如有</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">第三方H5页面。为了提升服务便捷性、方便用户快速触达第三方服务我们可能会接入</span><strong>第三方的H5服务页面入口如果您进入这些H5页面该第三方可能会收集你的手机号、身份证件号、付款账号信息请注意您在以上第三方H5页面进行的各项操作请遵守该等第三方的隐私保护政策。当您离开我们平台跳转至第三方H5页面时我们提醒您注意保护个人隐私。本平台不收集、不存储您在该类第三方服务页面填写和提交的任何个人信息。</strong>
</p>
<p><strong>四、我们如何共享、转让、公开披露您的个人信息</strong></p>
<p><strong>(一)共享</strong></p>
<p>
<strong>我们不会与陕西启星汇申网络科技有限公司及关联方以外的任何公司、组织和个人分享您的个人信息,但以下情况除外:</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">1、获得您及监护人明确同意或授权的共享</span></p>
<p><span style="color: rgb(51, 51, 51);">2、基于法定情形提供。根据法律法规的规定、诉讼争议解决需要、您与我们签署的相关协议(包括在线签署的电子协议及平台规则)或法律文件,或行政、司法等有权机关依法提出要求时,我们可能会共享您的个人信息;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">3、提供统一管理服务。为</span><strong>便于您统一管理账号,体验更优质的服务,我们可能会向我们的关联公司共享您的个人信息。但我们只会共享必要的个人信息,如果我们共享您的个人敏感信息或者关联方改变个人信息的使用目的,将再次征求您的授权同意;</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">4、提供必要的合作服务并保证服务安全、优化。</span><strong>我们提供的产品/服务大多是无法单独完成的故我们的某些服务将由业务合作伙伴提供。为保障为您提供的服务顺利完成我们可能会将您的个人信息共享给我们的合作伙伴包括基础技术服务、支付服务、营销活动等的合作商、第三方商家、广告商等同时为了向您提供更完善、优质、安全的产品和服务我们的应用中会嵌入授权合作伙伴的软件工具开发包本政策中简称“SDK”或其他类似的应用程序我们的某些服务将由授权合作伙伴提供或使用第三方SDK相关技术为您提供服务。基于此我们会与合作伙伴共享您的某些个人信息或者第三方SDK会通过SDK方式收集您的个人信息</strong><span
style="color: rgb(51, 51, 51);">,具体包括:</span></p>
<p><span style="color: rgb(51, 51, 51);">1</span><strong>第三方账号登录、内容分享</strong><span
style="color: rgb(51, 51, 51);">。QQ、微信、新浪微博会通过SDK方式收集您的</span><strong>位置信息、网络信息包括Wi-Fi信息、设备标识信息(MAC地址、IMEI、IMSI)、运营商信息、外部存储设备信息,用于实现第三方账号授权登录、共享发布的内容及评论等信息。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">2</span><strong>安全监测与风险防范</strong><span
style="color: rgb(51, 51, 51);">。为了保障您的账号安全避免您遭受欺诈、网络病毒、网络攻击等风险为我们提供安全保障的合作伙伴会通过SDK方式收集与您有关的必要</span><strong>设备信息、日志信息,以及您的使用习惯和常用软件信息等来综合判断您的账号及交易风险,预防安全事件的发生。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">3</span><strong>支付与结算功能。</strong><span
style="color: rgb(51, 51, 51);">支付功能由与我们合作的第三方支付机构向您提供服务基于此支付宝、微信、银联会通过SDK方式收集您的</span><strong>手机号、设备信息识别码(包括IMSI)、位置信息、网络信息包括Wi-Fi信息、当前运行进程/获取运行中进程信息、屏幕参数、运营商信息</strong><span
style="color: rgb(51, 51, 51);">,保证充值、消费、支付功能的正常使用,这些信息是支付功能所必需的信息,拒绝提供将导致您无法使用该功能。</span><strong>当您提现收入(如有)时,为了您能及时完成收入的结算与提现、依据法律规定完成税费缴纳,将由与您另行单独确认的第三方服务方向您提供结算、税费扣缴服务,基于此,我们会向该类第三方服务方共享您提现时主动提供的收款账户信息以及身份信息,具体信息详见第二节第(七)款。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">4人脸识别。阿里云、腾讯云、字节跳动会通过SDK方式收集您的证件信息、设备标识信息、网络信息包括Wi-Fi信息、设备传感器信息、屏幕参数、应用列表该等第三方获取的面部特征信息用于人脸核验我们只获得核验结果不保存您的面部特征信息。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">5直播视频服务。声网、会</span><strong>通过SDK收集您的共享Wi-Fi信息、设备标识信息、地理位置信息、运营商信息、外部存储设备、当前运行进程/获取运行中进程信息、屏幕参数,并共享用户授予的读取/写入外置存储、位置权限、获取设备信息、相机/摄像头权限、读取手机/电话状态用于聊天室内和IM音视频通话图片上传、直播推流和直播回放功能等相关功能。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">目前,我们接入的第三方服务商主要包括以下几种类型:</span></p>
<p><span style="color: rgb(51, 51, 51);">用于消息推送功能包括手机厂商Push推送、特定事件提醒</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">用于支付相关服务,包括订单支付、交易行为核验、收入结算、支付信息汇总统计;</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">用于在您同意的情况下获取设备位置权限、搜集设备信息和日志信息;</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">用于第三方授权服务,包括第三方账号登陆、将有关内容分享至第三方产品;</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">用于优化产品性能,包括提高硬件配网能力、降低服务器成本、功能热修复;</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">用于账号安全、产品加固相关服务,包括网络监测、域名解析、防劫持、防黑产、反作弊、加解密服务。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">我们接入的部分第三方SDK可能会收集您的个人信息如您在我们的服务中使用这类由第三方提供的服务时您同意将由其直接收集和处理您的信息。我们会评估这类第三方服务收集个人信息的合法性、正当性、必要性要求该等第三方对您的个人信息采取保护措施并严格遵守相关法律法规与监管要求。您可以查看下方《语音接入第三方SDK目录》了解我们主要接入的第三方SDK基本情况。</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">羽声语音直播接入第三方 SDK 目录(与全国平台登记信息完全一致)</span>
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">1、</span><span
style="color: rgb(51, 51, 51);">SDK 名称APP 支付客户端 SDK<br>开发者信息:支付宝(杭州)信息技术有限公司<br>服务类型:唤起支付宝 App 完成支付<br>所涉信息:设备 MAC 地址、网络访问、WiFi 状态、读取电话状态、写入外部存储<br>隐私政策链接:</span>https://opendocs.alipay.com/open/54/01g6qm
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">2、</span><span
style="color: rgb(51, 51, 51);">SDK 名称QQ 互联 SDKQQ 开放平台)<br>开发者信息:深圳市腾讯计算机系统有限公司<br>服务类型QQ 分享、授权登录<br>所涉信息设备标识信息IMEI/AndroidID/ICCID、定位信息、地理位置、ANDROID_ID<br>隐私政策链接:</span>https://connect.qq.com/index.html
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">3、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:微信 OpenSDK Android<br>开发者信息:深圳市腾讯计算机系统有限公司<br>服务类型:微信分享、微信登录、微信支付、微信客服<br>所涉信息设备标识信息IMEI/AndroidID/ICCID、定位信息、地理位置、ANDROID_ID<br>隐私政策链接:</span>https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">4、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:声网音视频 SDK含音频 RTC<br>开发者信息:上海声网科技有限公司<br>服务类型:提供实时音频服务<br>所涉信息:设备 MAC 地址、IP 地址、网络访问、WiFi 状态、设备信息、文件存储权限、麦克风权限<br>隐私政策链接:</span>https://www.shengwang.cn/SDK-privacy-policy/
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">5、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:腾讯云即时通信 IM SDK<br>开发者信息:腾讯云计算(北京)有限责任公司<br>服务类型:即时通信(私聊、群聊、房间内公屏聊天)<br>所涉信息:设备 MAC 地址、IP 地址、网络状态、文件存储权限、麦克风权限、相机权限<br>隐私政策链接:</span>https://cloud.tencent.com/document/product/269/58094
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">6、</span><span
style="color: rgb(51, 51, 51);">SDK 名称ShareSDK含友盟统计 / 友盟推送)<br>开发者信息广州掌淘网络科技有限公司ShareSDK<br>服务类型:社会化分享、统计分析、消息推送<br>所涉信息设备标识符IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息、社交账号公开信息、地理位置、IP 地址、应用列表<br>隐私政策链接:</span>https://www.umeng.com/page/policy
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">7、</span><span
style="color: rgb(51, 51, 51);">SDK 名称Bugly Android<br>开发者信息:深圳市腾讯计算机系统有限公司<br>服务类型:定位崩溃、异常上报与运营统计<br>所涉信息日志信息自定义日志、Logcat 日志、崩溃堆栈)、设备 IDandroidid / idfv、联网信息、系统名称、系统版本、国家码<br>隐私政策链接:</span>https://privacy.qq.com/document/preview/fc748b3d96224fdb825ea79e132c1a56
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">8、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:腾讯云慧眼人脸核身增强版 SDK<br>开发者信息:腾讯云计算(北京)有限责任公司<br>服务类型:实名认证<br>所涉信息个人身份信息真实姓名、身份证号、面部识别特征、读取短信、联系人、通话记录、位置信息、设备标识信息IMEI、IMSI、AndroidID<br>隐私政策链接:</span>https://cloud.tencent.com/document/product/1007/66043
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">9、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:音视频通话 TRTC SDKAndroid<br>开发者信息:深圳市腾讯计算机系统有限公司<br>服务类型:即时语音通话(私聊、群聊、房间内公屏聊天)<br>所涉信息:设备 MAC 地址、IP 地址、网络状态、文件存储权限、麦克风权限、相机权限<br>隐私政策链接:</span>https://cloud.tencent.com/document/product/647/57574
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">10、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:号码认证-android阿里云一键登录<br>开发者信息:阿里巴巴云计算(北京)有限公司<br>服务类型:手机号一键登录<br>所涉信息网络类型、设备信息IP 地址、设备制造商、设备型号、手机操作系统、SIM 卡状态)、运营商类型、本机号码<br>隐私政策链接:</span>https://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud202112211045_86198.html
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">11、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:对象存储 OSS Android SDK阿里云<br>开发者信息:阿里云计算有限公司<br>服务类型:平台图片、视频、礼物等文件存储<br>所涉信息:设备型号、设备操作系统信息(用于兼容性适配与故障排查)<br>隐私政策链接:</span>https://terms.alicdn.com/legal-agreement/terms/privacy_policy_full/20240202100310511/20240202100310511.html
</p>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><span style="color: rgb(51, 51, 51); font-family: 宋体;">12、</span><span
style="color: rgb(51, 51, 51);">SDK 名称:腾讯云 COS 文件存储器 SDK<br>开发者信息:腾讯云计算(北京)有限责任公司<br>服务类型:平台图片、视频、礼物等文件存储<br>所涉信息设备型号、设备操作系统、IP 地址、网络连接类型(用于兼容性与传输优化)<br>隐私政策链接:</span>https://cloud.tencent.com/document/product/454/61839
</p>
<p><br></p>
<p>13、<span
style="color: rgba(0, 0, 0, 0.9); background-color: rgb(255, 255, 255); font-size: 16px;">SDK 名称:联通认证 SDK<br>开发者信息:联通在线信息科技有限公司<br>服务类型:手机号一键登录 / 本机号码校验<br>所涉信息网络类型、网络地址IP 地址)、运营商类型、本机手机号、手机设备类型、手机操作系统、硬件厂商<br>隐私政策链接:</span><a
href="https://msv6.wosms.cn/html/oauth/protocol2.html" target="_blank"
style="text-align: start;">https://msv6.wosms.cn/html/oauth/protocol2.html</a><br></p>
<h3 style="text-align: start;">手机 GPS 定位说明(无第三方 SDK</h3>
<p>功能场景</p>
<ol>
<li style="text-align: start;">
业务功能:判断主播/观众实时地理位置,用于「附近频道」「同城房间」「地区排行榜」「内容合规(区域管制)」等。
</li>
<li style="text-align: start;">
触发时机:仅当用户首次进入需定位的页面时弹窗申请,拒绝不影响基础功能。
</li>
<li style="text-align: start;">所涉信息<br>精确位置GPS 经纬度)、粗略位置(网络定位辅助)、手机方向传感器(用于地图罗盘旋转)。
</li>
<li style="text-align: start;">使用方式</li>
</ol>
<ul>
<li style="text-align: start;">仅 App 前端调用
Android「LocationManager」/iOS「CLLocationManager」系统接口未集成任何第三方定位 SDK。
</li>
<li style="text-align: start;">
定位结果仅在客户端内存临时使用,退出相关页面立即释放,不做后台持续采集、不上传服务器、不存储本地、不与任何第三方共享。
</li>
<li style="text-align: start;">权限管理<br>用户可随时在系统设置-应用权限-位置信息中关闭授权,关闭后涉及位置的功能将提示「需要位置权限」并引导重新开启。
</li>
<li style="text-align: start;">未成年人<br>如用户未满 14 周岁,我们将在征得监护人同意后才会申请位置权限,否则默认关闭定位相关功能。
</li>
</ul>
<p><span style="color: rgb(51, 51, 51);"> </span></p>
<p><strong>自启动和关联启动说明:</strong></p>
<p><strong>为确保本应用处于关闭或后台运行状态下可正常接收到客户端推送的广播信息,本应用须使用(自启动)能力,将存在一定频率通过系统发送广播唤醒本应用自启动或关联启动行为,是因实现功能及服务所必要的。</strong>
</p>
<p><strong>请您知悉1我们仅会出于合法、正当、必要、明确的目的共享您的个人信息并且授权合作伙伴只能接触到其履行职责所需信息。同时我们会与合作伙伴签署严格的保密协定要求他们按照我们的说明、本政策以及其他任何相关的保密和安全措施来处理您的个人信息2前述第三方合作伙伴为数据控制者以其自己的名义获得您的同意以处理您的个人信息。合作方可能有其独立的隐私政策我们建议您认真阅读并遵守第三方的隐私政策。如果您拒绝我们的合作方在提供服务时收集为提供服务所必需的个人信息将可能导致您无法使用相应服务。</strong>
</p>
<p><strong>(二)转让</strong></p>
<p><span
style="color: rgb(51, 51, 51);">我们不会将您的个人隐私信息转让给任何公司组织和个人,但以下情况除外:</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">1、在获取明确同意的情况下共享获得您的明确同意后我们将与其分享您的个人隐私信息</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2、在涉及合并、收购、资产转让、破产清算时你的个人信息有可能因此而被转移如涉及个人隐私信息转让我们将要求受让方继续受此政策约束并告知您受让方身份、联系方式否则我们将要求受让方向您重新索取授权同意。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">(三)公开披露</span></p>
<p><span
style="color: rgb(51, 51, 51);">1、公开披露是指向社会或不特定人群发布信息的行为。我们仅在下列情形下公开披露您的个人隐私信息</span>
</p>
<p><span style="color: rgb(51, 51, 51);">1征得您明确的授权同意</span></p>
<p><span style="color: rgb(51, 51, 51);">2基于国家法律法规的规定而对外披露</span></p>
<p><span
style="color: rgb(51, 51, 51);">3应国家司法机关及其他有关机关基于法定程序的要求而披露</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">4为公共利益实施新闻报道、舆论监督等行为在合理的范围内公开的</span>
</p>
<p><span style="color: rgb(51, 51, 51);">5为应对突发公共卫生事件或在紧急情况下为保护其他用户及第三方生命健康和财产安全而必须披露的在该情况下我们将在紧急情况消除后及时告知您</span>
</p>
<p><span style="color: rgb(51, 51, 51);">6应用户监护人合法要求而提供用户个人身份信息时</span></p>
<p><span
style="color: rgb(51, 51, 51);">7对违规账号、欺诈行为等进行处罚公告、公布中奖/获胜者等名单时脱敏展示相关信息等必要事宜而进行的必要披露。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2、对于公开披露的您的个人信息我们会在收到公开披露申请后第一时间且审慎审查其正当性、合理性、合法性并在公开披露时和公开披露后采取最严格个人信息安全保护措施和手段对其进行保护。</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">(四)共享、转让、公开披露个人信息时事先征得授权同意的例外</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">下述情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:</span>
</p>
<p><span style="color: rgb(51, 51, 51);">1、与国家安全、国防安全直接相关的</span></p>
<p><span style="color: rgb(51, 51, 51);">2、与公共安全、公共卫生、重大公共利益直接相关的</span></p>
<p><span
style="color: rgb(51, 51, 51);">3、与犯罪侦查、起诉、审判和判决执行等直接相关的或根据法律法规的要求、行政机关或公检法等有权机关的要求的</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">4、出于维护您或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的;</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">5、个人信息是您自行向社会公开的或者是从合法公开的渠道如合法的新闻报道、政府信息公开等渠道中收集到的</span>
</p>
<p><span style="color: rgb(51, 51, 51);">6、根据与您签订和履行相关协议或其他书面文件所必需的</span>
</p>
<p><span style="color: rgb(51, 51, 51);">7、法律法规等规定的其他情形。</span></p>
<p><span style="color: rgb(51, 51, 51);">请知悉,根据适用的法律,若我们对个人信息采取技术措施和其他必要措施进行处理,使得数据接收方无法重新识别特定个人且不能复原,则此类处理后数据的共享、转让、公开披露无需另行向您通知并征得您的同意。</span>
</p>
<p><strong>五、我们如何存储和保护您的个人信息</strong></p>
<p><strong>(一)个人信息的存储</strong></p>
<p><strong>1、存储地点</strong><span style="color: rgb(51, 51, 51);">:我们会按照法律法规规定,将境内收集的用户个人信息存储于中华人民共和国境内。目前我们不会跨境传输或存储您的个人信息或向境外提供个人信息的场景。将来如需跨境传输或存储的,我们会单独向您明确告知信息出境的目的、接收方、使用方式和范围、安全保证措施等情况并征得您的同意。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2、</span><strong>存储期限:除非依据法律法规或双方约定,我们只会在为实现服务目的所必需的最短时间内留存您的个人信息,此外,我们或对您的相关信息保存至相关法律所规定的必要期限(例如,根据《电子商务法》规定:商品和服务信息、交易信息保存时间自交易完成之日起不少于三年;根据《网络安全法》规定:采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月;根据《互联网用户公众账号信息服务管理规定》:互联网用户公众账号信息服务提供者应当记录互联网用户公众账号信息服务使用者发布内容和日志信息,并按规定留存不少于六个月)。</strong>
</p>
<p><strong>我们在判断前述期限的标准主要包括并以其中较长者为准:</strong></p>
<p><strong>A. 完成与您相关的服务目的、维护相应服务及业务记录、应对您可能的查询或投诉;</strong></p>
<p><strong>B. 保证我们为您提供服务的安全和质量;</strong></p>
<p><strong>C. 您是否同意更长的留存期限;</strong></p>
<p><strong>D. 是否存在保留期限的其他特别约定。</strong></p>
<p>
<strong>在超出保存期限后,我们会根据适用法律的要求删除或者匿名化处理您的个人信息,但法律有特殊要求的除外。</strong>
</p>
<p>
<strong>当我们的产品或服务发生停止运营的情况时,我们将以推送通知、公告等形式通知您,并在合理期限内删除您的个人信息或进行匿名化处理,法律法规另有规定的除外。</strong>
</p>
<p><strong>(二)个人信息的保护措施</strong></p>
<p><span style="color: rgb(51, 51, 51);">数据传输方面采用传输层安全协议等密码技术通过Https等方式防止传输链路被嗅探、窃听截取风险建立安全的隐私数据采集环境保证数据采集的私密性和完整性。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">数据存储方面我们会通过安全的方式存储您的信息包括本地存储例如利用APP进行数据缓存。我们只会在为实现服务目的所必需的时间内或法律法规规定的条件下存储您的个人信息。您可以自主选择删除观看历史、视频缓存、搜索记录等您在使用</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音</span><span
style="color: rgb(51, 51, 51);">APP服务时提供和产生的数据记录。</span></p>
<p><span style="color: rgb(51, 51, 51);">信息安全方面,我们努力为您的信息安全提供保障,以防止信息的泄露、丢失、不当使用、未经授权访问和披露等。我们使用多方位的安全保护措施,以确保您的个人信息保护处于合理的安全水平,包括技术保护手段、管理制度控制、安全体系保障等诸多方面。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">数据访问和使用的安全控制方面,实施严格的数据权限控制机制,采取多重身份认证技术,并对能够处理您的信息的行为进行监控,避免数据被违规访问和未授权使用。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">建立完整的审计机制,对数据生命周期的全流程进行监控与审计,防止您的个人信息遭遇未经授权的访问、公开披露、使用、修改、人为或意外的损坏或丢失。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">其他可行的安全组织和管理措施:</span></p>
<p><span style="color: rgb(51, 51, 51);">1、在我们从第三方间接收集您的个人信息前我们会明确以书面形式如合作协议、承诺书要求该第三方在已经取得您明示同意后收集以及处理如共享等个人信息在书面协议层面要求第三方对个人信息来源的合法性和合规性作出承诺如第三方有违反行为的我们会明确要求对方承担相应法律责任</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">2、在我们向业务合作伙伴共享您的个人信息前我们会严格要求合作伙伴的信息保护义务与责任并要求业务合作伙伴在合作前需与</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">签署关于数据安全的保护协议,一旦业务合作伙伴有任何违反协议的行为,将须承担相应法律责任;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">3、我们建立了合理有效、科学健全的安全应急响应体系明确了网络安全事件的分类分级标准、安全应急响应组织及职责并根据安全事件的不同类型和级别制定了适当的应急响应预案明确规范了安全事件的报告流程和应急响应处置流程。同时我们还具备“</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">”安全应急响应中心,由专业的安全技术和运营团队负责维护,便于及时有效的响应、处置各类安全漏洞和突发事件,联合相关部门进行安全事件溯源和打击;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">4、如不幸发生个人信息安全事件的我们将按照法律法规的要求及时向您告知安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您难以逐一告知个人信息主体时我们会采取合理、有效的方式发布公告。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">5、请您知悉并理解互联网并非绝对安全的环境我们强烈建议通过安全方式、使用复杂密码协助我们保证您的账号安全。如发现自己的个人信息泄密尤其是您自己的账户或密码发生泄露请立即根据本政策文末中提供的联系方式联络我们以便我们采取相应措施来保护您的个人信息安全。</span>
</p>
<p><strong>六、您如何管理您的个人信息</strong></p>
<p><span style="color: rgb(51, 51, 51);">您对您的个人信息享有以下权利:</span></p>
<p><strong>(一)访问权</strong></p>
<p><strong>1、账号信息</strong><span style="color: rgb(51, 51, 51);">:您可以通过相关产品页面随时登陆您的个人账号,随时查询或访问您的账号中个人资料信息,包括:头像、昵称、星座、城市等。例如:“头像/昵称”信息在</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">APP中的访问路径为我的—头像栏</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">微信小程序的访问路径为:我的-&gt;点击个人头像-&gt;点击头像右下角编辑icon可进入资料编辑页面。</span>
</p>
<p><strong>2、使用信息</strong><span style="color: rgb(51, 51, 51);">:您可以通过相关产品页面随时查阅您的使用信息,包括:订单记录、浏览记录、动态记录等。例如:“浏览记录”信息在</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">APP和微信小程序中的访问路径为我的—足迹</span></p>
<p><span style="color: rgb(51, 51, 51);">3、财产信息您可以通过</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">APP 我的-钱包,以及</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">微信公众号-钱包查阅;</span></p>
<p><span style="color: rgb(51, 51, 51);">4、</span><strong>其他信息:您也可以在【我的】-【帮助与反馈】-【个人信息收集清单】中集中查询您的网络身份标识和鉴权信息、身份信息、用户基本资料、个人财产信息、用户使用过程信息、设备信息、内容制作与发布。如您在访问过程中遇到操作问题或如需获取其他前述方法无法获知的个人信息内容,您可通过本政策第九节提供的方式联系我们,我们将在核实您的身份后在合理期限内向您提供,但法律法规另有规定或本政策另有约定的除外。</strong>
</p>
<p><em>我们会按照如下规则进行个性化推荐或定向推送,并为您提供相应的退出机制:</em></p>
<p><em>我们会根据您的喜欢为您提供个性化的推广内容,</em></p>
<p><em>例如在主页推荐房间、派对 -
推荐;您可以通过“我的-设置-个性化推荐”-关闭。关闭后,您看到的相关内容以房间活跃值默认展示。</em></p>
<p><strong>(二)复制权</strong></p>
<p><strong>若您需要复制我们收集的关于你本人的基本资料、身份信息的,您可通过本政策第九节提供的方式联系我们,我们将在核实您的身份后在合理期限内向您提供,或在技术可行的前提下根据您的请求将您的个人信息转移至指定的个人信息处理者,但法律法规另有规定或本政策另有约定的除外。</strong>
</p>
<p><strong>(三)更正/修改权</strong></p>
<p>
<strong>若您发现您提供给我们的个人信息存在登记错误、不完整或有更新的,您可在我们产品和/或服务中更正/修改您的相关个人信息。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">1、对于您的部分个人信息您可以按照相关功能页面的指引和设置在线进行更正/修改。例如“头像/昵称”信息更正/修改路径为:我的—头像栏—编辑资料;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2、对于您在行使上述权利过程中遇到的困难或者其他可能目前无法向您提供在线自行更正/修改服务的,经过对您身份的验证,且更正/修改不影响信息的客观性和准确性的情况下,您</span><strong>有权对错误或不完整的信息作出更正或修改,或在特定情况下,尤其是数据错误时,通过我们公布的反馈与报错等措施将您的更正/修改申请提交给我们,或联系我们(联系方式:详见下文第九节),要求我们更正或修改您的数据,但法律法规另有规定的除外。但出于安全性和身份识别的考虑,您可能无法修改注册时提交的某些初始注册信息。</strong>
</p>
<p><strong>(四)删除权</strong></p>
<p><span
style="color: rgb(51, 51, 51);">1、对于您提供的部分个人信息您可以自行通过我们提供的相关产品和服务的功能页面主动删除您提供信息。例如</span><strong>头像/昵称”信息在羽声语音APP中的删除路径为【我的-个人主页-资料】。您也可以自主删除您发布的视频、动态、图片等。一旦您删除后,我们即会对此类信息进行删除或匿名化处理,法律法规另有规定的除外</strong><span
style="color: rgb(51, 51, 51);"></span></p>
<p><span
style="color: rgb(51, 51, 51);">2、在以下情形中</span><strong>您可以通过本政策第九节提供的联系方式</strong><span
style="color: rgb(51, 51, 51);">向我们提出删除个人信息的请求,但已做匿名化处理或法律法规另有规定的除外:</span>
</p>
<p><span style="color: rgb(51, 51, 51);">1如果我们处理个人信息的行为违反法律法规</span></p>
<p><span
style="color: rgb(51, 51, 51);">2如果我们收集、使用您的个人信息却未征得您的明确同意</span>
</p>
<p><span style="color: rgb(51, 51, 51);">3如果我们处理个人信息的行为严重违反了该政策</span></p>
<p><span style="color: rgb(51, 51, 51);">4如果您主动注销了账号</span></p>
<p><span style="color: rgb(51, 51, 51);">5当我们终止服务及运营时。</span></p>
<p><strong>(五)撤回同意权</strong></p>
<p><span style="color: rgb(51, 51, 51);">1、我们提供的产品或服务的部分功能需要获得您使用设备的相关权限包括位置、相机、麦克风等详见本隐私政策第二节第十二条“我们获取的设备权限”具体以产品实际获取的功能为准</span><strong>您可以在授权后随时撤回(或停止)对该权限的继续授权</strong><span
style="color: rgb(51, 51, 51);">,包括通过您设备中的设置页面或</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音</span><span
style="color: rgb(51, 51, 51);">APP的相关路径“我的-设置-隐私-隐私权限设置”)撤回相关授权。示例路径如下:</span>
</p>
<p>
<strong>1位置的权限您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问位置信息】撤回同意;</strong>
</p>
<p>
<strong>2相机的权限您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问相机】撤回同意;</strong>
</p>
<p>
<strong>3麦克风的权限您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问相机】撤回同意;</strong>
</p>
<p><strong>4日历的权限您可通过【我的-系统设置-系统权限管理】撤回同意。</strong></p>
<p><span style="color: rgb(51, 51, 51);">2、</span><strong>就我们通过短信的方式向您发送的商业性服务信息如果您不想收到此类信息您可以通过联系我们联系方式详见下文第九节或者通过编辑“T”或“TD”并回复短信进行退订提请注意我们不会就您申请退订额外收取任何费用但可能会发生一定的通信或者网络费用具体以通信运营商与您约定为准退订成功后我们将不再向您发送此类型的短信。就我们通过您设备的系统通知向你推送的内容如果您不想收到此类信息你可选择在设备中关闭羽声语音直播的通知功能</strong><span
style="color: rgb(51, 51, 51);"></span></p>
<p><span style="color: rgb(51, 51, 51);">3、对于合作方使用或我们转让、公开披露您的个人信息您可以通过我们的相关功能页面或联系我们、合作方撤回您的授权但法律法规另有规定或本隐私政策另有约定的除外。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">4、您可以通过卸载</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音</span><span
style="color: rgb(51, 51, 51);">App的方式撤回我们通过当前设备对您的个人信息的收集能力。</span>
</p>
<p><strong>5、当您收回同意后我们将不再处理相应的个人信息。但您收回同意的决定不会影响此前基于您的授权而开展的个人信息处理。当您更新APP版本后未经您的明确同意我们不会更改您之前设置的权限状态。</strong>
</p>
<p>
<strong>6、对于您无法直接通过上述路径改变授权同意或撤回同意的您均可通过本政策第九节提供的方式联系我们进行处理但法律法规另有规定或本政策另有约定的除外。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">(六)注销权</span></p>
<p><span
style="color: rgb(51, 51, 51);">我们向您提供账户注销的途径。在您符合国家相关法律法规规定及约定注销条件的情况下,可以通过本隐私政策预留的联系方式(</span><strong>详见下文第九节</strong><span
style="color: rgb(51, 51, 51);">)或在线申请注销您的账户。</span></p>
<p><strong>提请注意:当您注销账号后,您将无法再以该账号登录和使用我们的产品与服务;且该账号在羽声语音及旗下的其他产品与服务使用期间已产生的但未消耗完毕的权益及未来的预期利益等全部权益将被清除;该账号下的内容、信息、数据、记录等将会被删除或匿名化处理(但法律法规另有规定或监管部门另有要求的除外,如依据《中华人民共和国网络安全法》规定,您的网络操作日志将至少保留六个月的时间);羽声语音账号注销完成后,将无法恢复。更多关于羽声语音账号注销的流程、条件等事项请详见《帐号注销须知》。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">如您在谨慎考虑后仍执意决定注销您的</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">账号的,您可以在您使用的我们的产品/服务的相关功能设置页面或根据操作指引向我们提交注销申请,</span><strong>羽声语音APP的在线申请注销路径为【我的】-【设置】-【账号与安全】-【安全中心】-【注销账号】羽声语音直播微信小程序可以选择通过上述羽声语音APP注销路径、联系客服或者通过本隐私政策第九节预留的联系方式申请注销。</strong>
</p>
<p>
<strong>在您主动注销账户之后,我们将停止为您提供产品或服务,根据适用法律的要求删除您的个人信息,或使其匿名化处理。</strong>
</p>
<p><strong>(七)约束信息系统自动决策</strong></p>
<p><span style="color: rgb(51, 51, 51);">在某些业务功能中,我们可能仅依据信息系统、算法等在内的非人工自动决策机制做出决定。如果这些决定显著影响您的合法权益,您有权通过本政策第九节提供的联系方式要求我们做出解释并拒绝我们仅通过自动化决策的方式作出决定,我们也将在不侵害</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音直播</span><span
style="color: rgb(51, 51, 51);">商业秘密或其他用户权益、社会公共利益、国家利益的前提下做出合理解释、处理。</span>
</p>
<p><span style="color: rgb(51, 51, 51);"></span><strong>八)我们对去世用户的个人信息保护</strong>
</p>
<p><strong>1.
羽声语音直播将根据《个人信息保护法》的相关规定保护死者个人信息。羽声语音用户(仅限自然人)去世后,其近亲属为了自身的合法、正当利益,可以通过本隐私政策第九节“联系我们”中公示的联系方式,对去世用户的相关个人信息行使查阅、复制、更正、删除等权利,但是去世用户生前另有安排的除外。</strong>
</p>
<p><strong>2.
您理解并确认,为了充分保护去世用户的个人信息权益,申请行使本条权利的去世用户近亲属需要根据羽声语音直播的指定流程或客服提示,提交去世用户的身份证明文件、死亡证明文件、申请人的身份证明文件、申请人与去世用户的亲属关系证明文件,并提供申请行使的权利种类、目的。更多关于去世用户的个人信息保护流程、条件等事项请联系在线客服。</strong>
</p>
<p><strong>(九)响应您的上述请求</strong></p>
<p>
<strong>如果您在行使上述权利、处置您的个人信息时有任何疑问,您均可以通过本隐私政策第九节中公示的联系方式与我们沟通解决。</strong>
</p>
<p>
<strong>为保障安全当您提出前述请求时您需要提供上述要求材料或以其他方式证明您的身份再处理您的请求若您拒绝提供相应证明材料我们将无法响应您的请求。我们将在15日内做出答复</strong><span
style="color: rgb(51, 51, 51);">。在以下情形中,按照法律法规要求,我们将无法响应您的请求:</span>
</p>
<p><span style="color: rgb(51, 51, 51);">1、与国家安全、国防安全、国家利益有关的</span></p>
<p><span style="color: rgb(51, 51, 51);">2、与公共安全、公共卫生、重大公共利益有关的</span></p>
<p><span style="color: rgb(51, 51, 51);">3、与犯罪刑事侦查、起诉、立案、审判和执行判决等有关的</span>
</p>
<p><span style="color: rgb(51, 51, 51);">4、有充分证据表明个人信息主体存在主观恶意串通妨碍第三人行使合法权益或滥用权利使其他个人、组织的合法权益受到严重损害的</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">5、响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的</span>
</p>
<p><span style="color: rgb(51, 51, 51);">6、涉及商业秘密的。</span></p>
<p><strong>七、未成年人保护</strong></p>
<p><span style="color: rgb(51, 51, 51);">我们的产品、网站和服务主要面向成年人。</span><strong>您知悉,羽声语音直播将依赖用户提供的个人信息判断用户是否为未成年人</strong><span
style="color: rgb(51, 51, 51);">。若您是未成年人,建议您及您的监护人仔细阅读本政策,并在征得您的监护人同意的前提下使用我们的产品或服务或向我们提供信息。对于经父母或监护人同意使用我们的产品或服务而收集未成年人个人信息的情况,我们只会在法律法规允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用、共享、转让或披露此信息。</span>
</p>
<p><strong>特别地若您是14周岁以下的儿童将适用《羽声语音儿童个人信息保护规则》建议您及您的监护人仔细阅读《羽声语音儿童个人信息保护规则》并在征得您的监护同意的前提下使用我们的产品或服务。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">若您是未成年人的监护人,一旦发现未成年人虚报年龄注册账号的,可通过本政策第九节所述方式向我们提出中止/终止该未成年人的账号或者要求向该未成年人提供青少年保护服务模式下的产品与/或服务。为了验证请求方为未成年人的监护人,特别是当您作为监护人提出资金类申请时,我</span><strong>们可能需要您向我们提供被监护人以及监护人的身份证(正面及反面)复印件/扫描件一份、可证明法定监护关系的有效法律文件(如出生证明、户口本)以及监护人手机号码、收款账号信息(如需),以保障用户的账号与资金安全。我们在收到您的上述文件后,会及时审核其真实性和有效性,并请确保监护人的手机畅通,以便我们的专业客服联系您进一步核实身份(如需)。同时,我们将依法记录、保存验证身份信息及验证结果</strong><span
style="color: rgb(51, 51, 51);">,这些信息仅供完成验证、争议解决服务之目的,或者其他法律法规所规定的用途,我们向您承诺,我们会以最大努力保障您的个人信息安全,未经您明示授权不会用作其他目的。以上信息包含您及您所监护的未成年人的个人敏感信息,您有权拒绝提供,但我们收集这些信息是为了调查事实与帮助您解决问题,如您拒绝提供上述信息,我们可能无法向您及时反馈投诉、申诉或咨询结果。</span>
</p>
<p><span style="color: rgb(51, 51, 51);">若您是未成年人的监护人,当您对您所监护的未成年人的个人信息保护有任何相关疑问时,请通过第九节“联系我们”中公示的联系方式与我们联系。</span>
</p>
<p><strong>八、本政策的更新</strong></p>
<p>
<strong>为保证您能够获得更好的服务并应平台业务调整以及未来发展,本政策也会与时俱进随之更新。但在更新的同时,我们会以单独、明显的方式获取您的授权。</strong>
</p>
<p>
<strong>我们在应用程序、官方网站更新版本后或官方发出公告后以合理、适当、明显的方式提醒您相关内容的更新,以便您能更快了解您权利的更迭。</strong>
</p>
<p>
<strong>对于重大变更,我们还会提供更为显著的通知方式(我们会通过包括但不限于邮件、短信、公告、首页或在浏览页面做特别提示等方式,来向您表达政策的更新内容)。</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">本政策所指的重大变更包括但不限于:</span></p>
<p><span
style="color: rgb(51, 51, 51);">(一)我们的服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式等;</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">(二)我们在所有权结构、组织架构等方面发生重大变化。如业务调整、破产并购等引起的所有者变更等;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">(三)个人信息共享、转让或公开披露的主要对象发生变化;</span>
</p>
<p><span
style="color: rgb(51, 51, 51);">(四)您参与个人信息处理方面的权利及其行使方式发生重大变化。</span>
</p>
<p><strong>九、联系我们</strong></p>
<p>
<strong>如您对本政策或您个人信息的相关事宜有投诉、举报、意见或建议的可以通过如下方式与我们陕西启星汇申网络科技有限公司联系我们将在15天内予以您答复</strong>
</p>
<p><span style="color: rgb(51, 51, 51);">1、</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">羽声语音</span><span
style="color: rgb(51, 51, 51);">站内客服:【我的】-【在线客服】-输入“人工客服”进行咨询;</span>
</p>
<p><span style="color: rgb(51, 51, 51);">2、人工客服电话</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">17531991222</span></p>
<p><span style="color: rgb(51, 51, 51);">3、个人信息保护负责人电话</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">17531991222</span></p>
<p style="text-align: left;"><span
style="color: rgb(51, 51, 51);">4、我们还设立了个人信息保护专职部门您可以写信至</span><span
style="font-family: 宋体;">陕西省咸阳市高新技术产业开发区高科三路科技企业孵化园3栋4层</span><span
style="color: rgb(51, 51, 51);">法务合规部(收);邮编</span><span
style="color: rgb(51, 51, 51); font-family: 宋体;">710000</span></p>
<p><strong>十、其他</strong></p>
<p><strong>本政策的解释、执行及争议解决均适用中华人民共和国法律(不包括冲突法)。因本政策产生争议的,双方应首先友好协商,协商不成的,您同意通过被告所在地有管辖权的法院提起诉讼来寻求解决方案。</strong>
</p>
<p><strong>陕西启星汇申网络科技有限公司 </strong></p>
<p><strong>陕西省咸阳市高新技术产业开发区高科三路科技企业孵化园3栋4层</strong></p>
<p><span
style="color: rgb(26, 26, 26); background-color: rgb(255, 255, 255);">陕ICP备2024054760号-7A</span>
</p>
<p></p>
<p></p>
<p style="text-align: left;"><span style="font-family: 宋体;"> </span></p></body>
</html>

View File

@@ -1,8 +0,0 @@
package com.xscm.moduleutil;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
public class BaseEvent {
}

View File

@@ -1,369 +0,0 @@
package com.xscm.moduleutil.activity;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.BarUtils;
import com.blankj.utilcode.util.LogUtils;
import com.hjq.toast.ToastUtils;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.dialog.LoadingDialog;
import com.xscm.moduleutil.utils.BackgroundManager;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.DisplayUtil;
import com.xscm.moduleutil.widget.QXGiftDriftView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Method;
public abstract class BaseAppCompatActivity<VDB extends ViewDataBinding> extends AppCompatActivity
implements BackgroundManager.BackgroundUpdateListener, ColorManager.ColorChangeListener {
@Override
protected void attachBaseContext(Context newBase) {
// 设置字体缩放比例为1.0f,即不跟随系统字体大小变化
super.attachBaseContext(DisplayUtil.attachBaseContext(newBase, 1.0f));
}
protected VDB mBinding;
@Subscribe (threadMode = ThreadMode.MAIN)
public void onEvent(Object event) {
}
private LoadingDialog mLoadingDialog;
// 添加广播接收器成员变量
private BroadcastReceiver mLogoutReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if ("com.xscm.moduleutil.ACTION_USER_LOGOUT".equals(intent.getAction())) {
// 在这里处理用户登出后的UI更新
// 例如:隐藏需要登录才能显示的控件
// 或者跳转到登录状态的页面
handleUserLogout();
}
}
};
// 处理用户登出的方法
protected void handleUserLogout() {
// 子类可以重写此方法处理具体的登出逻辑
// 例如更新UI状态、清除本地数据等
ActivityUtils.finishAllActivities();
}
QXGiftDriftView qxGiftDriftView;
protected void doDone(){}
@SuppressLint("UnspecifiedRegisterReceiverFlag")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().getDecorView().setBackgroundResource(R.mipmap.log_bj);
setContentView(getLayoutId());
doDone();
// 隐藏标题栏
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
mBinding = DataBindingUtil.setContentView(this, getLayoutId());
mBinding.setLifecycleOwner(this);
ARouter.getInstance().inject(this);
BarUtils.setStatusBarLightMode(this, isLightMode());
BarUtils.transparentStatusBar(this);
initView();
initData();
initCompleted();
// 注册背景更新监听器
BackgroundManager.getInstance().addListener(this);
// 尝试加载网络背景
loadNetworkBackground();
// 注册颜色变化监听器
ColorManager.getInstance().addColorChangeListener(this);
// 注册登出广播接收器
IntentFilter filter = new IntentFilter("com.xscm.moduleutil.ACTION_USER_LOGOUT");
registerReceiver(mLogoutReceiver, filter);
EventBus.getDefault().register(this);
}
// 在Activity中
private static final int REQUEST_OVERLAY_PERMISSION = 1001;
private void checkAndRequestOverlayPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
new AlertDialog.Builder(this)
.setTitle("需要悬浮窗权限")
.setMessage("应用需要悬浮窗权限才能显示飘屏效果")
.setPositiveButton("去设置", (dialog, which) -> {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
})
.setNegativeButton("取消", null)
.show();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_OVERLAY_PERMISSION) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.canDrawOverlays(this)) {
ToastUtils.show("已获得悬浮窗权限");
} else {
ToastUtils.show("未获得悬浮窗权限");
}
}
}
}
@Override
public void onColorChanged() {
// 在主线程中更新UI
runOnUiThread(this::updateUIColors);
}
// 子类可以重写此方法来更新UI颜色
protected void updateUIColors() {
// 默认实现,子类可以覆盖
}
//在类中添加以下成员变量
private Handler timerHandler = new Handler();
private Runnable timerRunnable = new Runnable() {
@Override
public void run() {
// 调用你要执行的方法
// executePeriodicTask();
// 每10秒执行一次
timerHandler.postDelayed(this, 10000);
}
};
// 启动定时器的方法
private void startTimer() {
timerHandler.postDelayed(timerRunnable, 10000);
}
protected void loadNetworkBackground() {
// 只有当已经有背景URL时才加载
String backgroundUrl = BackgroundManager.getInstance().getBackgroundUrl();
if (backgroundUrl != null && !backgroundUrl.isEmpty()) {
// 检查是否有已加载的drawable
Drawable cachedDrawable = BackgroundManager.getInstance().getBackgroundDrawable();
if (cachedDrawable != null) {
getWindow().getDecorView().setBackground(cachedDrawable);
} else {
// 加载网络背景
BackgroundManager.getInstance().loadBackgroundDrawable(this, new BackgroundManager.BackgroundLoadCallback() {
@Override
public void onLoadSuccess(Drawable drawable) {
getWindow().getDecorView().setBackground(drawable);
}
@Override
public void onLoadFailed() {
// 加载失败时使用默认背景
getWindow().getDecorView().setBackgroundResource(R.mipmap.activity_bj);
}
});
}
}
}
@Override
public void onBackgroundUpdated(Drawable drawable) {
// 当背景更新时更新当前Activity的背景
if (drawable != null) {
getWindow().getDecorView().setBackground(drawable);
}
}
// 提供一个方法供子类调用用于设置背景URL
protected void setNetworkBackgroundUrl(String url) {
BackgroundManager.getInstance().setBackgroundUrl(url);
}
@Override
public Resources getResources() {//禁止app字体大小跟随系统字体大小调节
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1.0f) {
android.content.res.Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1.0f;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
static float fontScale = 1f;
// @Override
// public Resources getResources() {
// Resources resources = super.getResources();
// return DisplayUtil.getResources(this,resources,fontScale);
// }
public void setFontScale(float fontScale) {
this.fontScale = fontScale;
DisplayUtil.recreate(this);
}
public boolean isLightMode() {
return true;
}
protected abstract void initData();
protected abstract void initView();
protected void initCompleted() {
}
protected abstract int getLayoutId();
@Override
public void finish() {
EventBus.getDefault().unregister(this);
super.finish();
LogUtils.e(this.getComponentName()+"========finish");
}
@Override
protected void onDestroy() {
// 移除背景更新监听器
BackgroundManager.getInstance().removeListener(this);
// 移除颜色变化监听器
ColorManager.getInstance().removeColorChangeListener(this);
if (mBinding != null) {
mBinding.unbind();
}
try {
unregisterReceiver(mLogoutReceiver);
} catch (Exception e) {
// 忽略异常
}
try {
unregisterReceiver(mLogoutReceiver);
} catch (Exception e) {
// 忽略异常
}
super.onDestroy();
}
public void showLoading(String content) {
if (mLoadingDialog == null) {
mLoadingDialog = new LoadingDialog(this,content);
}
if (!mLoadingDialog.isShowing()) {
mLoadingDialog.show();
}
}
public void showLoading() {
if (mLoadingDialog == null) {
mLoadingDialog = new LoadingDialog(this);
}
if (!mLoadingDialog.isShowing()) {
mLoadingDialog.show();
}
}
public void disLoading() {
if (mLoadingDialog != null && mLoadingDialog.isShowing()) {
mLoadingDialog.dismiss();
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View view = getCurrentFocus();
if (isShouldHideInput(view, ev)) {
InputMethodManager Object = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (Object != null) {
Object.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
try {
return super.dispatchTouchEvent(ev);
} catch (Exception e) {
return false;
}
}
//判断是否隐藏键盘
public boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] leftTop = {0, 0};
//获取输入框当前的location位置
v.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域保留点击EditText的事件
return false;
} else {
return true;
}
}
return false;
}
@Override
protected void onResume() {
super.onResume();
LogUtils.e(this.getComponentName()+"========onResume");
}
@Override
protected void onPause() {
super.onPause();
LogUtils.e(this.getComponentName()+"=========onPause");
}
@Override
protected void onStop() {
super.onStop();
LogUtils.e(this.getComponentName()+"=========onStop");
}
}

View File

@@ -1,66 +0,0 @@
package com.xscm.moduleutil.base;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.ViewDataBinding;
import com.xscm.moduleutil.bean.room.RoomInfoResp;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseRoomFragment<P extends BaseRoomPresenter, VDB extends ViewDataBinding> extends BaseMvpFragment<P, VDB> implements BaseRoomContacts.View {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onDestroyView() {
unRegisterWheatViews();
super.onDestroyView();
}
@Override
protected void initView() {
registerWheatViews();
}
/**
* 房间信息
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfo(RoomInfoResp resp) {
roomInfoUpdate(resp);
}
public abstract void roomInfoUpdate(RoomInfoResp resp);
public abstract void registerWheatViews();
public abstract void unRegisterWheatViews();
public abstract int[] collectCurrentCardiacValues();
protected void tzblChanged() {
}
private int getAmativenessWheatMaoziLevel(int value) {
if (value >= 52000) {
return 3;
} else if (value >= 10000) {
return 2;
} else if (value >= 1000) {
return 1;
} else {
return 0;
}
}
}

View File

@@ -1,31 +0,0 @@
package com.xscm.moduleutil.base
import com.xscm.moduleutil.utils.config.EnvironmentEnum
object ExternalResConstants {
//================================================================================MQTT======================================================================================
// var IS_MQTT_RELEASE = true
// val MQTT_PATH_DEBUG = "tcp://1.13.181.248"
// val MQTT_PATH_RELEASE = "tcp://1.13.101.98"
//
// fun MQTT_PATH(): String {
// return if (IS_MQTT_RELEASE) {
// MQTT_PATH_RELEASE
// } else {
// MQTT_PATH_DEBUG
// }
// }
//================================================================================HTTP======================================================================================
var IS_HTTP_RELEASE = true
val HTTP_PATH_DEBUG:EnvironmentEnum = EnvironmentEnum.TEST
val HTTP_PATH_RELEASE:EnvironmentEnum = EnvironmentEnum.PRODUCTION
fun HTTP_PATH(): EnvironmentEnum {
return if (IS_HTTP_RELEASE) {
HTTP_PATH_RELEASE
} else {
HTTP_PATH_DEBUG
}
}
//================================================================================END======================================================================================
}

View File

@@ -1,37 +0,0 @@
package com.xscm.moduleutil.base
/**
* Created by xscm on 2020/7/23.
* 描述web url 常量
*/
object WebUrlConstants {
val BASE_URL = CommonAppContext.getInstance().currentEnvironment.h5Url
/**青少年模式*/
val WEB_ADOLESCENT_URL = BASE_URL + "/web/index.html#/pages/feedback/teenage?id=%s"
val WEB_SET_GROUP_URL = BASE_URL + "/web/index.html#/pages/union/setGroup?id=%s&guildId=%s"
/**举报*/
val WEB_REPORT_URL =
BASE_URL + "/web/index.html#/pages/feedback/report?id=%s&fromType=%d&fromId=%s"
/**规则*/
val WEB_RULES_URL = BASE_URL + "/web/index.html#/pages/other/taskDesc"
/**道具商城*/
val WEB_PROP_MALL_URL = BASE_URL + "/web/index.html#/pages/prop/propMall?id=%s"
/**公会*/
val WEB_GUILD_URL = BASE_URL + "/web/index.html#/pages/union/index?id=%s"
/**等级*/
val WEB_GRADE_URL = BASE_URL + "/web/index.html#/pages/other/grade?id=%s"
/**反馈*/
val WEB_HELP_URL = BASE_URL + "/web/index.html#/pages/feedback/help?id=%s"
/**邀请*/
val WEB_INVITATION_URL = BASE_URL + "/web/index.html#/pages/other/income?id=%s"
}

View File

@@ -1,53 +0,0 @@
package com.xscm.moduleutil.bean;
import java.util.List;
import lombok.Data;
/**
* @author qx
* @data 2025/6/3
* @description: 这是广场中的列表数据
*/
@Data
public class CircleListBean {
public int id;//语圈ID
public int user_id;//用户ID
public String nickname;//用户昵称
public String avatar;//用户头像
public int is_like;//我是否点赞0没有1点赞
public int sex;//性别 1男2女
public String content;//内容
public String like_num;//点赞数
public String rewards_num; //打赏金额
public String is_room;//作者是否在房间中1在0不在
public String room_id;//作者所在房间ID is_room =0 此值小于0
public String comment_num;//评论数
public int is_recommend;//1非推荐2推荐
public String ip;//活跃地址
public String images;////图片 JSON字符串 封面获取第一张
public String createtime;//时间
public String topic_id;
public String share_url;
public List<HeatedBean> title;//话题列表
public String nobility_image;//贵族图标
public String nickname_color = "";//昵称颜色
public String mic_cycle;//麦圈
public String read_num;//阅读数
public List<LikeList> like_list;
@Data
public class LikeList {
public String user_id;
public String nickname;
public String avatar;
public int age;//年龄
public String sex;
public String constellation;//星座
public String birthday;//生日
}
}

View File

@@ -1,15 +0,0 @@
package com.xscm.moduleutil.bean;
import com.xscm.moduleutil.BaseEvent;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
public class MqttXlhEnd extends BaseEvent implements Serializable {
private static final long serialVersionUID = 1L;
private String message;
}

View File

@@ -1,72 +0,0 @@
package com.xscm.moduleutil.diff
import android.os.Bundle
import androidx.recyclerview.widget.DiffUtil
import com.xscm.moduleutil.bean.CircleListBean
class CircleListDiffCallback(
private val oldList: List<CircleListBean>?,
private val newList: List<CircleListBean>?
) :
DiffUtil.Callback() {
override fun getOldListSize(): Int {
return oldList?.size ?: 0
}
override fun getNewListSize(): Int {
return newList?.size ?: 0
}
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList!![oldItemPosition].id == newList!![newItemPosition].id
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
val oldItem = oldList!![oldItemPosition]
val newItem = newList!![newItemPosition]
// 判断核心数据是否一致(排除动态字段)
if (!equalsStr(oldItem.nickname, newItem.nickname)) return false
if (!equalsStr(oldItem.avatar, newItem.avatar)) return false
if (!equalsStr(oldItem.content, newItem.content)) return false
if (oldItem.is_like != newItem.is_like) return false
if (oldItem.sex != newItem.sex) return false
if (!equalsStr(oldItem.images, newItem.images)) return false
// 动态字段不参与整体比较(让 getChangePayload 控制)
return equalsStr(oldItem.rewards_num, newItem.rewards_num)
&& equalsStr(oldItem.like_num, newItem.like_num)
&& equalsStr(oldItem.comment_num, newItem.comment_num)
// && equalsStr(oldItem.read_num, newItem.read_num)
}
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
val oldItem = oldList!![oldItemPosition]
val newItem = newList!![newItemPosition]
val diff = Bundle()
if (!equalsStr(oldItem.rewards_num, newItem.rewards_num)) {
diff.putString("rewards_num", newItem.rewards_num)
}
if (!equalsStr(oldItem.like_num, newItem.like_num)) {
diff.putString("like_num", newItem.like_num)
diff.putInt("is_like",newItem.is_like)
}
if (!equalsStr(oldItem.comment_num, newItem.comment_num)) {
diff.putString("comment_num", newItem.comment_num)
}
// if (!equalsStr(oldItem.read_num, newItem.read_num)) {
// diff.putString("read_num", newItem.read_num)
// }
return if (diff.size() == 0) null else diff
}
private fun equalsStr(a: String?, b: String?): Boolean {
if (a == null && b == null) return true
if (a == null || b == null) return false
return a == b
}
}

View File

@@ -1,36 +0,0 @@
package com.xscm.moduleutil.enumType
/**
* 房间类型枚举
* 对应 type_id 含义:
* 2-拍卖真爱拍小黑屋1/3/4/8-交友6-小黑屋7-互娱
*/
enum class RoomType(
val description: String, // 房间类型描述
private vararg val typeIds: Int // 该类型对应的所有 type_id支持多个
) {
// 枚举常量:名称(描述, 对应的type_id)
// SINGING_PK("点唱(pk)", 1),
AUCTION("拍卖(真爱拍小黑屋)", 2),
DATING("交友", 1,3, 4, 8), // 1、3、4、8 均对应交友
BLACK_ROOM("小黑屋", 6),
MUTUAL_ENTERTAINMENT("互娱", 7);
companion object {
/**
* 根据 type_id 字符串获取对应的枚举实例
* @param typeIdStr 房间类型字符串(如 "1"、"3"
* @return 匹配的 RoomType若无效则返回 null
*/
fun fromTypeId(typeIdStr: String?): RoomType? {
if (typeIdStr.isNullOrBlank()) return null
val typeId = try {
typeIdStr.toInt() // 转换为 Int处理数字字符串
} catch (e: NumberFormatException) {
return null // 非数字字符串视为无效
}
// 遍历所有枚举,匹配 type_id
return values().find { typeId in it.typeIds }
}
}
}

View File

@@ -1,12 +0,0 @@
package com.xscm.moduleutil.event;
import com.xscm.moduleutil.BaseEvent;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class CabinEvent extends BaseEvent {
private boolean joined;
}

View File

@@ -1,6 +0,0 @@
package com.xscm.moduleutil.event;
import com.xscm.moduleutil.BaseEvent;
public class GiftDoubleClickEvent extends BaseEvent {
}

View File

@@ -1,6 +0,0 @@
package com.xscm.moduleutil.event;
import com.xscm.moduleutil.BaseEvent;
public class LogOutEvent extends BaseEvent {
}

View File

@@ -1,16 +0,0 @@
package com.xscm.moduleutil.event;
import com.xscm.moduleutil.BaseEvent;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*@author qx
*@data 2025/6/24
*@description: 背景音乐
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class MusicEvent extends BaseEvent {
}

View File

@@ -1,20 +0,0 @@
package com.xscm.moduleutil.event;
import com.xscm.moduleutil.BaseEvent;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@Data
@NoArgsConstructor
public class PlazaEvent extends BaseEvent {
public static final int DELETE_ZONE = 1009;
public static final int MODIFY_ZONE = 1008;
public static final int ADD_ZONE = 1007;
private int msgId;
private int type;//DELETE_ZONE : 删除 MODIFY_ZONE : 修改 ADD_ZONE : 新增
}

View File

@@ -1,6 +0,0 @@
package com.xscm.moduleutil.event;
import com.xscm.moduleutil.BaseEvent;
public class RoomOutEvent extends BaseEvent {
}

View File

@@ -1,14 +0,0 @@
package com.xscm.moduleutil.event;
import com.xscm.moduleutil.BaseEvent;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class RoomOwnerLeaveEvent extends BaseEvent {
private String room_id;
private String user_id;
private String emchat_username;
}

View File

@@ -1,35 +0,0 @@
package com.xscm.moduleutil.utils;
import android.os.SystemClock;
import android.util.SparseArray;
import android.view.View;
/**
*@author qx
*@data 2025/9/10
*@description: 防止重复点击的工具类
*/
public class ClickUtils {
private static final long DEFAULT_CLICK_INTERVAL = 500;
private static final SparseArray<Long> lastClickTimes = new SparseArray<>();
public static boolean isFastDoubleClick(View view) {
return isFastDoubleClick(view, DEFAULT_CLICK_INTERVAL);
}
public static boolean isFastDoubleClick(View view, long interval) {
long currentTime = SystemClock.elapsedRealtime();
int viewId = view.getId();
Long lastClickTime = lastClickTimes.get(viewId);
if (lastClickTime != null && currentTime - lastClickTime < interval) {
return true;
}
lastClickTimes.put(viewId, currentTime);
return false;
}
// 新增:清理所有点击记录
public static void clearAllClickRecords() {
lastClickTimes.clear();
}
}

View File

@@ -1,135 +0,0 @@
package com.xscm.moduleutil.widget
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.LinearGradient
import android.graphics.Matrix
import android.graphics.Shader
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatTextView
import com.xscm.moduleutil.R
/**
*
* 流光字体
* @author TXZ
* @version 1.0
* created by 2024/5/23 9:32
*/
class ShineTextView : AppCompatTextView {
//是否开启流光,默认开启
var isShine = true
//默认是流光效果 0 流光 1 注入效果
var shineType = 0
//流光效果下字体流动次数
var shineCount: Int = Int.MAX_VALUE
//注入效果 开始,中间,结束
var startColor: Int = Color.WHITE
var shineColor: Int = Color.WHITE
var endColor: Int = Color.WHITE
//一次动效时长
var shineDuration: Int = 400
var _count: Int = 0 //自行运行动画次数
private lateinit var mLinearGradient: LinearGradient
private var mGradientMatrix: Matrix = Matrix()
private var mViewWidth = 0
private var mTranslate = 0
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context, attrs, defStyleAttr
) {
obtainAttributes(attrs!!)
}
private fun obtainAttributes(attrs: AttributeSet) {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ShineTextView)
typedArray.apply {
isShine = typedArray.getBoolean(R.styleable.ShineTextView_isShine, isShine)
shineType = typedArray.getInt(R.styleable.ShineTextView_shineType, shineType)
startColor = typedArray.getColor(R.styleable.ShineTextView_startColor, startColor)
shineColor = typedArray.getColor(R.styleable.ShineTextView_midColor, shineColor)
endColor = typedArray.getColor(R.styleable.ShineTextView_endColor, endColor)
shineCount = typedArray.getInt(R.styleable.ShineTextView_shineCount, shineCount)
shineDuration =
typedArray.getInt(R.styleable.ShineTextView_shineDuration, shineDuration)
}
typedArray.recycle()
}
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
if (isShine) {
mViewWidth = measuredWidth
when (shineType) {
0 -> {
//流光效果
mLinearGradient = LinearGradient(
0f,
0f,
(mViewWidth / 4).toFloat(),
0f,
intArrayOf(currentTextColor, shineColor, currentTextColor),
null,
Shader.TileMode.CLAMP
)
}
1 -> {
mLinearGradient = LinearGradient(
0f,
0f,
(mViewWidth / 6).toFloat(),
0f,
intArrayOf(endColor, shineColor, startColor),
null,
Shader.TileMode.CLAMP
)
}
}
paint.shader = mLinearGradient
}else {
mLinearGradient = LinearGradient(
0f,
0f,
0f,
0f,
intArrayOf(Color.TRANSPARENT,Color.TRANSPARENT),
null,
Shader.TileMode.CLAMP
)
}
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
if (!isShine) return
mTranslate += mViewWidth / (shineDuration / 50)
if (mTranslate > 1.2 * mViewWidth) {
mTranslate = -mViewWidth / 5
_count++
}
mGradientMatrix.setTranslate(mTranslate.toFloat(), 0f)
mLinearGradient.setLocalMatrix(mGradientMatrix)
when {
shineType == 0 && _count < shineCount -> postInvalidateDelayed(50)
shineType == 1 && _count < 1 -> postInvalidateDelayed(50)
else -> {
mGradientMatrix.setTranslate((1.2 * mViewWidth).toFloat(), 0f)
mLinearGradient.setLocalMatrix(mGradientMatrix)
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 705 B

View File

@@ -1,127 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/bubble"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ease_row_pubilc_user_bg"
android:maxWidth="@dimen/dp_256"
android:minWidth="@dimen/dp_256"
android:padding="@dimen/dp_8">
<!-- 网络背景图片 -->
<!-- <ImageView-->
<!-- android:id="@+id/network_background"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="0dp"-->
<!-- tools:src="@mipmap/a1img_9"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintEnd_toEndOf="parent"/>-->
<!-- 用户头像 -->
<com.xscm.moduleutil.utils.MeHeadView
android:id="@+id/avatar"
android:layout_width="@dimen/dp_28"
android:layout_height="@dimen/dp_28"
android:layout_marginStart="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_3"
android:layout_marginEnd="@dimen/dp_3"
android:layout_marginBottom="@dimen/dp_3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:riv_oval="true" />
<!-- 用户名称 -->
<com.xscm.moduleutil.widget.ShineTextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:textColor="#CCA882"
android:textSize="@dimen/sp_12"
app:isShine="false"
app:layout_constraintStart_toEndOf="@+id/avatar"
app:layout_constraintTop_toTopOf="@+id/avatar"
tools:text="饶利" />
<!-- 用户标签容器 -->
<LinearLayout
android:id="@+id/line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:layout_marginTop="@dimen/dp_5"
android:orientation="horizontal"
app:layout_constraintStart_toEndOf="@+id/avatar"
app:layout_constraintTop_toBottomOf="@+id/tv_name" />
<!-- 消息内容 -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="2dp"
android:gravity="left|center_vertical"
android:orientation="horizontal"
android:padding="@dimen/dp_3"
android:paddingEnd="@dimen/dp_10"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/avatar"
app:layout_constraintTop_toBottomOf="@+id/line">
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:lineHeight="@dimen/dp_20"
android:lineSpacingExtra="@dimen/dp_2"
android:paddingStart="@dimen/dp_8"
android:paddingEnd="@dimen/dp_8"
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
tools:text="饶利: 潇洒亼◇生2.0"
tools:visibility="gone" />
<com.xscm.moduleutil.widget.AdaptiveImageView
android:id="@+id/im_emj"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:layout_marginStart="@dimen/dp_2"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:visibility="gone"
tools:src="@mipmap/ic_launcher"
tools:visibility="visible" />
<!-- <ImageView-->
<!-- android:id="@+id/im_emj"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="0dp"-->
<!-- android:layout_marginStart="@dimen/dp_2"-->
<!-- android:paddingStart="@dimen/dp_8"-->
<!-- android:paddingEnd="@dimen/dp_8"-->
<!-- tools:src="@mipmap/ic_launcher"-->
<!-- android:maxHeight="@dimen/dp_50"-->
<!-- android:maxWidth="@dimen/dp_50"-->
<!-- android:minWidth="@dimen/dp_40"-->
<!-- android:minHeight="@dimen/dp_40"-->
<!-- android:scaleType="centerCrop"-->
<!-- android:adjustViewBounds="true"-->
<!-- android:visibility="gone"-->
<!-- tools:visibility="visible"-->
<!-- app:layout_constraintWidth_default="wrap"-->
<!-- app:layout_constraintHeight_default="wrap"-->
<!-- app:layout_constraintWidth_min="@dimen/dp_40"-->
<!-- app:layout_constraintHeight_min="@dimen/dp_40"-->
<!-- app:layout_constraintWidth_max="@dimen/dp_50"-->
<!-- app:layout_constraintHeight_max="@dimen/dp_50"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent"/>-->
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/im"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:scaleType="fitCenter"
android:src="@drawable/gift_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.xscm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/iv_avatar"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_margin="@dimen/dp_4"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="@id/im"
app:layout_constraintStart_toStartOf="@+id/im"
app:layout_constraintTop_toTopOf="@+id/im"
tools:src="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/tv_sender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_4"
android:textColor="#FFFFFF"
android:textSize="@dimen/sp_12"
android:textStyle="bold"
app:layout_constraintStart_toEndOf="@+id/iv_avatar"
app:layout_constraintTop_toTopOf="@+id/iv_avatar"
tools:text="1111111" />
<TextView
android:id="@+id/tv_gift"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#fff"
android:textSize="@dimen/sp_10"
app:layout_constraintStart_toStartOf="@+id/tv_sender"
app:layout_constraintTop_toBottomOf="@+id/tv_sender"
tools:text="1111111" />
<ImageView
android:id="@+id/iv_gift"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="@dimen/dp_10"
android:scaleType="centerCrop"
app:layout_constraintEnd_toEndOf="@id/im"
app:layout_constraintTop_toTopOf="@+id/tv_sender" />
<TextView
android:id="@+id/tv_count"
android:layout_width="60dp"
android:layout_height="40dp"
android:fontFamily="@font/semibold"
android:gravity="start|center_vertical"
android:textColor="#FFF49F"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/im"
app:layout_constraintTop_toTopOf="parent"
tools:text="X14" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/shape_dialog">
<app.dinus.com.loadingdrawable.LoadingView
android:id="@+id/cool_wait_view"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:loading_renderer="CoolWaitLoadingRenderer" />
<TextView
android:id="@+id/tv_loading_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:text="加载中..."
android:textColor="#333333"
android:textSize="16sp"
android:paddingBottom="@dimen/dp_10"
android:layout_marginHorizontal="@dimen/dp_50"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cool_wait_view" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false">
<com.xscm.moduleutil.widget.CircularImage
android:id="@+id/riv"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/me_avatar_bg"
android:src="@mipmap/default_avatar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.8"
app:riv_oval="true" />
<ImageView
android:id="@+id/iv_sex"
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
android:background="@mipmap/nan"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
tools:visibility="visible" />
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/iv_frame"
android:layout_width="0dp"
android:layout_height="0dp"
android:contentDescription="@null"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5" />
<ImageView
android:id="@+id/iv_frame_bg"
android:layout_width="match_parent"
android:layout_height="0dp"
android:contentDescription="@null"
android:scaleType="fitXY"
app:layout_constraintHeight_default="spread"
app:layout_constraintTop_toTopOf="@+id/guideline"
app:layout_constraintWidth_default="spread"
tools:src="@mipmap/me_sj" />
<ImageView
android:id="@+id/iv_online"
android:layout_width="@dimen/dp_13"
android:layout_height="@dimen/dp_13"
android:src="@mipmap/me_online_icon"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintHorizontal_bias="0.9"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toTopOf="@id/riv"
app:layout_constraintVertical_bias="0.9" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,293 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false">
<!--说话动态图-->
<com.xscm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/riv"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_12"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@mipmap/room_ic_wheat_default"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/iv_ripple"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_8"
app:autoPlay="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1.05"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:loopCount="0"
app:source="mic.svga" />
<!-- <com.xscm.moduleutil.widget.AvatarFrameView-->
<!-- android:id="@+id/iv_ripple"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="0dp"-->
<!-- android:layout_marginTop="@dimen/dp_8"-->
<!-- app:autoPlay="false"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintDimensionRatio="1:1.05"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- />-->
<ImageView
android:id="@+id/iv_sex"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@mipmap/common_ic_headportriat_base"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toTopOf="@id/riv"
tools:visibility="visible" />
<View
android:id="@+id/view2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toTopOf="@id/riv" />
<ImageView
android:id="@+id/iv_tag_boos"
android:layout_width="32dp"
android:layout_height="14dp"
android:src="@mipmap/room_ic_wheat_tag_boss"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/view2"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_tag_type"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_5"
android:src="@mipmap/zc"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv" />
<!-- <TextView-->
<!-- android:id="@+id/tv_time"-->
<!-- android:layout_width="@dimen/dp_35"-->
<!-- android:layout_height="17.5dp"-->
<!-- android:background="@drawable/room_bg_wheat_time"-->
<!-- android:gravity="center"-->
<!-- android:text="00:00"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="@dimen/sp_9"-->
<!-- android:visibility="gone"-->
<!-- android:layout_marginBottom="@dimen/dp_6"-->
<!-- app:layout_constraintBottom_toBottomOf="@id/riv"-->
<!-- app:layout_constraintEnd_toEndOf="@id/riv"-->
<!-- app:layout_constraintStart_toStartOf="@id/riv"-->
<!-- tools:visibility="visible" />-->
<TextView
android:id="@+id/tv_time"
android:layout_width="@dimen/dp_35"
android:layout_height="17.5dp"
android:background="@mipmap/za_s"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="@dimen/sp_9"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
tools:visibility="visible" />
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/iv_frame"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_12"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view_riv_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="7dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/cl_guide1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingLeft="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
android:singleLine="true"
android:layout_marginTop="@dimen/dp_3"
android:textColor="@color/white"
android:textSize="@dimen/sp_10"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/riv"
tools:text="麦位1"
tools:textColor="@color/color_FF333333" />
<com.xscm.moduleutil.widget.WheatCharmView
android:id="@+id/charm_view"
android:layout_width="@dimen/dp_52"
android:layout_height="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_5"
android:clipChildren="false"
android:clipToPadding="false"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toBottomOf="@id/tv_name" />
<TextView
android:id="@+id/tv_time_pk"
android:layout_width="@dimen/dp_35"
android:layout_height="17.5dp"
android:background="@mipmap/za_s"
android:layout_marginBottom="@dimen/dp_5"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="@dimen/sp_9"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toBottomOf="@id/tv_name"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_shutup"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="4dp"
android:src="@mipmap/room_ic_wheat_shutup"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintWidth_percent="0.05"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_online"
android:layout_width="0dp"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:visibility="gone"
android:src="@mipmap/room_ic_owner_offline"
app:layout_constraintBottom_toBottomOf="@+id/riv"
app:layout_constraintEnd_toEndOf="@+id/riv"
app:layout_constraintStart_toStartOf="@+id/riv"
app:layout_constraintTop_toTopOf="@+id/riv"/>
<com.xscm.moduleutil.widget.ExpressionImgView
android:id="@+id/iv_face"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toTopOf="@id/riv"
app:layout_constraintVertical_bias="0.0" />
<ImageView
android:id="@+id/iv_gift"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:0.6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_maozi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_1"
android:scaleType="centerInside"
android:src="@mipmap/ic_room_huangguan"
android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/iv_frame"
app:layout_constraintTop_toTopOf="@id/iv_frame"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_room_xq_wno_male"
android:gravity="center"
android:text="1"
android:textColor="#fff"
android:textSize="@dimen/sp_10"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/iv_frame"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,273 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false">
<!--说话动态图-->
<com.xscm.moduleutil.widget.CircularImage
android:id="@+id/riv"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_12"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@mipmap/room_ic_wheat_default"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/iv_frame"
android:layout_width="0dp"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:visibility="gone"
tools:visibility="visible"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintHeight_percent="0.9"
app:layout_constraintWidth_percent="0.8"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/iv_ripple"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_8"
app:autoPlay="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight_percent="1"
app:layout_constraintWidth_percent="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:loopCount="0"
app:source="mic.svga" />
<ImageView
android:id="@+id/iv_sex"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@mipmap/common_ic_headportriat_base"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toTopOf="@id/riv"
tools:visibility="visible" />
<View
android:id="@+id/view2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toTopOf="@id/riv" />
<ImageView
android:id="@+id/iv_tag_boos"
android:layout_width="32dp"
android:layout_height="14dp"
android:src="@mipmap/room_ic_wheat_tag_boss"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/view2"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_tag_type"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_5"
android:src="@mipmap/zc"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv" />
<TextView
android:id="@+id/tv_time"
android:layout_width="@dimen/dp_35"
android:layout_height="17.5dp"
android:background="@mipmap/za_s"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="@dimen/sp_9"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
tools:visibility="visible" />
<View
android:id="@+id/view_riv_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="7dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/cl_guide1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2" />
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingLeft="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
android:singleLine="true"
android:layout_marginTop="@dimen/dp_6"
android:textColor="@color/white"
android:translationZ="@dimen/dp_10"
android:textSize="@dimen/sp_10"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/riv"
tools:text="麦位1"
tools:textColor="@color/color_FF333333" />
<com.xscm.moduleutil.widget.WheatCharmView
android:id="@+id/charm_view"
android:layout_width="@dimen/dp_52"
android:layout_height="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_5"
android:clipChildren="false"
android:clipToPadding="false"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toBottomOf="@id/tv_name" />
<TextView
android:id="@+id/tv_time_pk"
android:layout_width="@dimen/dp_35"
android:layout_height="17.5dp"
android:background="@mipmap/za_s"
android:layout_marginBottom="@dimen/dp_5"
android:gravity="center"
android:text="00:00"
android:textColor="@color/white"
android:textSize="@dimen/sp_9"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toBottomOf="@id/tv_name"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_shutup"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="4dp"
android:src="@mipmap/room_ic_wheat_shutup"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintWidth_percent="0.05"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_online"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@mipmap/room_ic_owner_offline"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.82"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_10"
app:loopCount="0"
tools:visibility="visible" />
<com.xscm.moduleutil.widget.ExpressionImgView
android:id="@+id/iv_face"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/riv"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@id/riv"
app:layout_constraintTop_toTopOf="@id/riv"
app:layout_constraintVertical_bias="0.0" />
<ImageView
android:id="@+id/iv_gift"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:0.6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_maozi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_1"
android:scaleType="centerInside"
android:src="@mipmap/ic_room_huangguan"
android:visibility="gone"
app:layout_constraintStart_toStartOf="@id/iv_frame"
app:layout_constraintTop_toTopOf="@id/iv_frame"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_room_xq_wno_male"
android:gravity="center"
android:text="1"
android:textColor="#fff"
android:textSize="@dimen/sp_10"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/iv_frame"
app:layout_constraintEnd_toEndOf="@id/riv"
app:layout_constraintStart_toStartOf="@id/riv"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,223 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 前台定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 后台定位权限Android 10+ -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<application
android:theme="@style/AppTheme">
<activity
android:name=".activity.login.activity.SwitchAccountsActivity"
android:exported="false" />
<activity
android:name=".activity.login.activity.ImproveInfoActivity"
android:exported="false" />
<activity
android:name=".activity.login.activity.ForgetPasswordActivity"
android:exported="false" />
<activity
android:name=".activity.login.activity.LoginActivity"
android:exported="false" />
<activity
android:name=".activity.main.activity.MainActivity"
android:configChanges="fontScale" />
<activity
android:name=".activity.room.activity.RoomActivity"
android:alwaysRetainTaskState="true"
android:configChanges="orientation|screenSize|keyboardHidden"
android:enableOnBackInvokedCallback="false"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".activity.room.activity.RedResultActivity"
android:exported="true" />
<activity
android:name=".activity.room.activity.SearchActivity"
android:exported="false" />
<activity
android:name=".activity.room.activity.RankingListActivity"
android:exported="false" />
<activity
android:name=".activity.room.activity.PopularRoomActivity"
android:exported="false" />
<activity
android:name=".activity.plaza.activity.DynamicDetailActivity"
android:exported="false"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".activity.plaza.activity.DynamicListActivity"
android:exported="false"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".activity.plaza.activity.ReleaseActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.AboutUsActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.WithdrawalListActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.GiftBoxRecordActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.BindCardDetailsActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.BindCardActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.AlbumDetailActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.SettingActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.CreateAlbumActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.RevenueActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.DailyTasksActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.UserHomepageActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.MyBagActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.BriefIntroductionActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.ChangeNicknameActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.CurrencyExchangeActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.WithdrawalActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.RechargeActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.MyMoneyActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.EditUserInfoActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.ChangPassActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.PersonalityActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.RealDetailActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.RoomAllowanceDetailActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.RoomAllowanceActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.RoomDetailsActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.CreatedRoomActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.MyRoomActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.PhoneReplacementActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.BlacklistActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.MessageReminderActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.NotificationActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.UnderageActivity"
android:exported="true" />
<activity
android:name=".activity.user.activity.RealNameActivity"
android:exported="false" />
<activity
android:name=".activity.user.activity.NoblePaymentActivity"
android:exported="false"/>
<activity
android:name=".activity.user.activity.NobleDetailsActivity"
android:exported="false"/>
<activity
android:name=".activity.user.activity.NobleTitleActivity"
android:exported="false"/>
<activity
android:name=".activity.user.activity.GiftWallActivity"
android:exported="false"/>
<activity
android:name=".activity.WebViewActivity"
android:exported="true">
<intent-filter>
<action android:name="com.qxcm.qxlive.PROTOCOL_WEBVIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".activity.msg.OfficialNoticeActivity"
android:exported="false" />
<service
android:name=".service.MediaProjectionService"
android:foregroundServiceType="mediaProjection" />
<service
android:name=".service.ForegroundService"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="microphone|camera|mediaPlayback" />
<service
android:name=".service.CancelNoticeService"
android:enabled="true"
android:exported="true" />
<!-- <provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>-->
</application>
</manifest>

View File

@@ -1,103 +0,0 @@
package com.xscm.modulemain
import android.content.Context
import com.blankj.utilcode.util.CrashUtils
import com.blankj.utilcode.util.LogUtils
import com.opensource.svgaplayer.utils.log.SVGALogger
import com.scwang.smartrefresh.layout.SmartRefreshLayout
import com.scwang.smartrefresh.layout.footer.ClassicsFooter
import com.scwang.smartrefresh.layout.header.ClassicsHeader
import com.xscm.modulemain.widget.WheatLayoutSingManager
import com.xscm.moduleutil.base.CommonAppContext
open class Application : CommonAppContext() {
var APP_CONENT = ""
var LOGUTILS_SAVE_PATH = ""
var CRASHUTILS_SAVE_PATH = ""
// 单例实例
companion object {
@Volatile
private lateinit var instance: Application
// 全局获取 Application 实例
fun getInstance(): Application {
return instance
}
// 获取 Application Context避免内存泄漏
fun getContext(): Context {
return instance.applicationContext
}
}
override fun onCreate() {
super.onCreate()
LOGUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_LOG")?.absolutePath.toString()
CRASHUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_CRASH")?.absolutePath.toString()
getExternalFilesDir("")
APP_CONENT = getExternalFilesDir("APP_CONTENT")?.absolutePath.toString()
// 初始化单例实例
instance = this
// 初始化并预绘制视图 二卡八列
WheatLayoutSingManager.init(this)
WheatLayoutSingManager.getInstance().setWheatData(null)
// 默认情况下SVGA 内部不会输出任何 log所以需要手动设置为 true
SVGALogger.setLogEnabled(false)
initLogUtils()
initCrashUtils()
initSmartRefreshLayout()
}
private fun initLogUtils() {
LogUtils.getConfig()
.setLogSwitch(true) // 全局开关
.setLog2FileSwitch(true) // 必须设为 true
.setDir(LOGUTILS_SAVE_PATH) // 设置有效路径
.setFileFilter(LogUtils.V); // 允许所有级别
}
private fun initCrashUtils() {
CrashUtils.init(CRASHUTILS_SAVE_PATH, object : CrashUtils.OnCrashListener {
override fun onCrash(crashInfo: CrashUtils.CrashInfo?) {
LogUtils.e("crash", crashInfo.toString())
}
})
}
private fun initSmartRefreshLayout() {
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, _ ->
val header = ClassicsHeader(context)
header.setDrawableSize(20f)
// header.setFinishDuration(0)
header.setTextSizeTitle(12f)
header.setTextSizeTime(10f)
header
}
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator { context, _ ->
val classicsFooter = ClassicsFooter(context)
classicsFooter.setDrawableSize(20f)
// classicsFooter.setFinishDuration(0)
classicsFooter.setTextSizeTitle(12f)
//指定为经典Footer默认是 BallPulseFooter
classicsFooter
}
}
fun getAppContent(): String {
return APP_CONENT
}
}

View File

@@ -1,258 +0,0 @@
package com.xscm.modulemain.activity.plaza.activity;
import android.content.Intent;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.LeadingMarginSpan;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.blankj.utilcode.util.ActivityUtils;
import com.xscm.modulemain.R;
import com.xscm.modulemain.databinding.ActivityDynamicListBinding;
import com.xscm.modulemain.activity.user.activity.UserHomepageActivity;
import com.xscm.modulemain.activity.plaza.contacts.CircleContacts;
import com.xscm.modulemain.activity.plaza.presenter.CirclePresenter;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulemain.manager.RoomManager;
import com.xscm.moduleutil.BaseEvent;
import com.xscm.moduleutil.adapter.CirleListAdapter;
import com.xscm.moduleutil.bean.CircleListBean;
import com.xscm.moduleutil.bean.CommentBean;
import com.xscm.moduleutil.bean.ExpandColumnBean;
import com.xscm.moduleutil.bean.HeatedBean;
import com.xscm.moduleutil.diff.CircleListDiffCallback;
import com.xscm.moduleutil.event.GiftRewardEvent;
import com.xscm.moduleutil.event.PlazaEvent;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ChatLauncher;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.widget.dialog.RewardGiftDialogFragment;
import com.xscm.modulemain.dialog.ShareDialog;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
/**
* @author qx
* @data 2025/6/3
* @description: 广场中顶部的热议点击进入的列表展示
*/
@Route(path = ARouteConstants.CIRCLE_LIST)
public class DynamicListActivity extends BaseMvpActivity<CirclePresenter, ActivityDynamicListBinding> implements CircleContacts.View {
private HeatedBean heatedBean;
CirleListAdapter cirleListAdapter;
private List<CircleListBean> circleList = new ArrayList<>();
@Override
protected void initData() {
heatedBean = getIntent().getParcelableExtra("heatedBean");
mBinding.topBar.setTitle(heatedBean.getTitle());
MvpPre.topicId(heatedBean.getTopic_id(), 1);
ImageUtils.loadHeadCC(heatedBean.getPic(), mBinding.ivAvatar);
mBinding.tvTitle.setText(heatedBean.getTitle());
mBinding.tvDescription.setText(heatedBean.getCount() + "条动态");
SpannableString spannableString = new SpannableString(heatedBean.getContent());
spannableString.setSpan(new LeadingMarginSpan.Standard(36), 0, heatedBean.getContent().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBinding.tvContent.setText(spannableString);
mBinding.recycleView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
cirleListAdapter = new CirleListAdapter(CirleListAdapter.PAGE_HOME);
mBinding.recycleView.setAdapter(cirleListAdapter);
cirleListAdapter.setOnItemClickListener(new CirleListAdapter.OnItemClickListener() {
@Override
public void onDianzanClick(int index, CircleListBean item) {
MvpPre.likeZone(index, item);
}
@Override
public void onHeadImageClick(CircleListBean item) {
Intent intent = new Intent(DynamicListActivity.this, UserHomepageActivity.class);
intent.putExtra("userId", item.getUser_id() + "");
startActivity(intent);
}
@Override
public void onZsClick(int position, CircleListBean item) {
RewardGiftDialogFragment.show(String.valueOf(item.getId()), item.getUser_id() + "", position, getSupportFragmentManager());
}
@Override
public void onMoreClick(int idx, CircleListBean item) {
ShareDialog shareDialog = new ShareDialog(DynamicListActivity.this, item.getContent(), item.getShare_url(), item.getId() + "", 3, item.getUser_id() + "", item);
shareDialog.setOnShareDataListener(new ShareDialog.OnShareDataListener() {
@Override
public void onShareDataLoaded(String id) {
MvpPre.deleteZone(idx, item);
}
});
shareDialog.show();
}
@Override
public void onPinglunClick(CircleListBean item) {
Intent intent = new Intent(DynamicListActivity.this, DynamicDetailActivity.class);
intent.putExtra("zone_id", item.getId() + "");
startActivity(intent);
}
@Override
public void onRelaClick(CircleListBean item) {
}
@Override
public void onGensui(CircleListBean item) {
if (item.getRoom_id() != null && !item.getRoom_id().equals("0")) {
RoomManager.getInstance().fetchRoomDataAndEnter(getApplicationContext(), item.getRoom_id(), "", null);
} else {
ChatLauncher.getInstance().launchC2CChat(DynamicListActivity.this, item.getUser_id() + "");
}
}
});
}
@Override
protected int getLayoutId() {
return R.layout.activity_dynamic_list;
}
@Override
protected CirclePresenter bindPresenter() {
return new CirclePresenter(this, this);
}
@Override
public void setCategories(List<HeatedBean> list) {
}
@Override
public void getCircleList(List<CircleListBean> list) {
if (list == null || list.isEmpty())
return;
circleList.addAll(list);
cirleListAdapter.setNewData(circleList);
}
@Override
public void setExpandColumn(List<ExpandColumnBean> list) {
}
@Override
public void setLikeZone(int index, CircleListBean item, int type) {
MvpPre.getCircleDetail(index, item);
}
@Override
public void setCircleDetail(CircleListBean bean) {
// 更新列表中的单个数据项(仅更新特定字段)
if (cirleListAdapter != null && bean != null) {
List<CircleListBean> dataList = cirleListAdapter.getData();
if (dataList != null) {
// 查找并更新对应的项
for (int i = 0; i < dataList.size(); i++) {
CircleListBean item = dataList.get(i);
// 根据ID匹配需要更新的项
if (item.getId() == bean.getId()) {
// 只更新特定字段
item.setRewards_num(bean.getRewards_num());
// 可以继续更新其他需要的字段
// 局部刷新该位置的数据
cirleListAdapter.notifyItemChanged(i);
break;
}
}
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(BaseEvent event) {
if (event instanceof GiftRewardEvent) {
MvpPre.getCircleDetail(((GiftRewardEvent) event).getPoints(),
circleList.get(((GiftRewardEvent) event).getPoints()));
if (ActivityUtils.getTopActivity() instanceof DynamicListActivity){
EventBus.getDefault().post(new PlazaEvent(circleList.get(((GiftRewardEvent) event).getPoints()).id, PlazaEvent.MODIFY_ZONE));
}
} else if (event instanceof PlazaEvent) {
CircleListBean item = null;
int index = 0;
for (int i = 0; i < circleList.size(); i++) {
if (circleList.get(i).getId() == ((PlazaEvent) event).getMsgId()) {
item = circleList.get(i);
index = i;
break;
}
}
if (item == null || ActivityUtils.getTopActivity() instanceof DynamicListActivity)
return;
switch (((PlazaEvent) event).getType()) {
case PlazaEvent.MODIFY_ZONE:
MvpPre.getCircleDetail(index, item);
break;
case PlazaEvent.DELETE_ZONE:
circleList.remove(index);
cirleListAdapter.notifyItemRemoved(index);
if (index != 0) {
cirleListAdapter.notifyItemRangeChanged(index, circleList.size() - index); // 修正后续索引
}
break;
}
}
}
@Override
public void getCommentList(CommentBean commentBean) {
}
@Override
public void commentZone() {
}
@Override
public void finishComment() {
}
@Override
public void getCircleDetail(int index, CircleListBean item, CircleListBean newItem) {
if (ActivityUtils.getTopActivity() instanceof DynamicListActivity){
EventBus.getDefault().post(new PlazaEvent(circleList.get(index).id, PlazaEvent.MODIFY_ZONE));
}
List<CircleListBean> oldList = new ArrayList<>(cirleListAdapter.getData());
circleList.set(index, newItem);
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CircleListDiffCallback(oldList, circleList), false);
cirleListAdapter.setNewDiffData(diffResult, circleList);
}
@Override
public void deleteZone(int index) {
if (ActivityUtils.getTopActivity() instanceof DynamicListActivity){
EventBus.getDefault().post(new PlazaEvent(circleList.get(index).id, PlazaEvent.DELETE_ZONE));
}
circleList.remove(index);
cirleListAdapter.notifyItemRemoved(index);
if (index != 0) {
cirleListAdapter.notifyItemRangeChanged(index, circleList.size() - index); // 修正后续索引
}
}
}

View File

@@ -1,23 +0,0 @@
package com.xscm.modulemain.activity.room.presenter;
import android.content.Context;
import com.xscm.modulemain.activity.room.contacts.ChatRoomContacts;
import com.xscm.moduleutil.presenter.BasePresenter;
public class ChatRoomPresenter extends BasePresenter<ChatRoomContacts.View> implements ChatRoomContacts.IPublicScreenEaseChatPre {
public ChatRoomPresenter(ChatRoomContacts.View view, Context context) {
super(view, context);
}
@Override
public void logEmchat(int code, String msg, String toChatUsername) {
}
@Override
public void switchPublicScreen(String room_id, String status) {
}
}

View File

@@ -1,100 +0,0 @@
package com.xscm.modulemain.activity.user.fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import com.xscm.modulemain.activity.user.PageViewModel;
import com.xscm.modulemain.adapter.GiftWallAdapter;
import com.xscm.modulemain.databinding.FragmentGiftWallBinding;
import com.xscm.moduleutil.bean.GiftUserWallBean;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
/**
* A placeholder fragment containing a simple view.
*/
public class PlaceholderGiftFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private PageViewModel pageViewModel;
private FragmentGiftWallBinding binding;
private GiftWallAdapter mGiftWallAdapter;
public static PlaceholderGiftFragment newInstance(int index) {
PlaceholderGiftFragment fragment = new PlaceholderGiftFragment();
// Bundle bundle = new Bundle();
// bundle.putInt(ARG_SECTION_NUMBER, index);
// fragment.setArguments(bundle);
return fragment;
}
@Override
public void onAttach(@NonNull @NotNull Context context) {
super.onAttach(context);
pageViewModel = new ViewModelProvider(this).get(PageViewModel.class);
int index = 1;
if (getArguments() != null) {
index = getArguments().getInt(ARG_SECTION_NUMBER);
// 获取传递的礼物列表数据
List<GiftUserWallBean.GiftWallBean> giftList =
(List<GiftUserWallBean.GiftWallBean>) getArguments().getSerializable("gift_list");
// 将数据设置到 ViewModel
if (giftList != null) {
if (index == 1){
pageViewModel.setLiangDataList(giftList);
}else if (index == 2){
pageViewModel.setNoLiangDataList(giftList);
}
}
}
pageViewModel.setIndex(index);
mGiftWallAdapter= new GiftWallAdapter(new ArrayList<>());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentGiftWallBinding.inflate(inflater, container, false);
View root = binding.getRoot();
// 设置 GridView
GridView gridView = binding.gridView;
gridView.setAdapter(mGiftWallAdapter);
// 观察数据变化并更新 GridView
pageViewModel.getDataList().observe(getViewLifecycleOwner(), dataList -> {
if (dataList != null) {
mGiftWallAdapter.updateData(dataList);
}
});
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@@ -1,179 +0,0 @@
package com.xscm.modulemain.activity.user.presenter;
import android.annotation.SuppressLint;
import android.content.Context;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.ZipUtils;
import com.xscm.modulemain.Application;
import com.xscm.modulemain.activity.user.activity.SettingActivity;
import com.xscm.modulemain.activity.user.conacts.SettingConacts;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.presenter.BasePresenter;
import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.utils.TimeUtils;
import com.xscm.moduleutil.utils.cos.CosUploadManager;
import com.xscm.moduleutil.utils.oss.OSSOperUtils;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.UUID;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public class SettingPresenter extends BasePresenter<SettingConacts.View> implements SettingConacts.IMePre {
private SettingConacts.View mView;
public SettingPresenter(SettingConacts.View view, Context context) {
super(view, context);
mView = view;
}
@Override
public void clearLoginInfo() {
api.clearLoginInfo(new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().clearLoginInfo(s);
}
});
}
@Override
public void cancel() {
api.cancel(new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().cancel(s);
}
});
}
@Override
public void getModifyHideStatus(String hide_status) {
api.getModifyHideStatus(hide_status, new BaseObserver<String>() {
@Override
public void onSubscribe(@NotNull Disposable d) {
addDisposable(d);
}
@Override
public void onNext(@NotNull String s) {
}
});
}
@SuppressLint("CheckResult")
@Override
public void sendAppLog() {
MvpRef.get().showLoadings("正在上传...");
Observable.create(new ObservableOnSubscribe<String>() {
@SuppressLint("CheckResult")
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
try {
File file = new File(Application.Companion.getInstance().getAppContent());
if (FileUtils.isFileExists(file.getParent() + "/DataInfo.zip")) {
FileUtils.delete(file.getParent() + "/DataInfo.zip");
}
boolean isZip = ZipUtils.zipFile(Application.Companion.getInstance().getAppContent(),
file.getParent() + "/DataInfo.zip");
if (isZip) {
emitter.onNext(file.getParent() + "/DataInfo.zip");
} else {
emitter.onNext("");
}
} catch (Exception e) {
LogUtils.e("压缩失败", e.toString());
emitter.onNext("");
}
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<String>() {
@SuppressLint("CheckResult")
@Override
public void accept(String zipPath) {
String upLogUrl = OSSOperUtils.getAppLogPath(new File(zipPath));
if (!zipPath.isEmpty()) {
CosUploadManager.getInstance(Application.getInstance()).upParameters(upLogUrl, zipPath, new CosUploadManager.UploadCallback() {
@Override
public void onSuccess(String url) {
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
api.sendAppLog(upLogUrl, url, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
MvpRef.get().disLoadings();
ToastUtils.showShort(s);
}
});
}
@Override
public void onFailure(Exception e) {
ToastUtils.showLong("上传失败");
LogUtils.e("上传失败", e.toString());
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().disLoadings();
}
@Override
public void onFailure1(IllegalStateException e) {
ToastUtils.showLong("上传失败");
LogUtils.e("上传失败", e.toString());
MvpRef.get().disLoadings();
}
});
} else {
ToastUtils.showLong("上传失败");
LogUtils.e("压缩失败");
if (MvpRef == null) {
MvpRef = new WeakReference<>(mView);
}
MvpRef.get().disLoadings();
}
}
});
}
}

View File

@@ -1,641 +0,0 @@
package com.xscm.modulemain.widget
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Canvas
import android.util.Log
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.annotation.Nullable
import com.google.android.flexbox.FlexboxLayout
import com.hjq.toast.ToastUtils
import com.opensource.svgaplayer.SVGAImageView
import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAVideoEntity
import com.xscm.moduleutil.R
import com.xscm.moduleutil.bean.RoomMessageEvent
import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.widget.CircularImage
import com.xscm.moduleutil.widget.GifAvatarOvalView
import com.xscm.moduleutil.widget.RoomMakeWheatView
import com.xscm.moduleutil.widget.RoomSingSongWheatView
import kotlin.math.roundToInt
/**
* 二卡八显示布局管理器(单例模式,支持预绘制和动态添加)
*/
class WheatLayoutSingManager private constructor(
private val appContext: Context
) {
// 内部根容器(预创建并提前绘制)
private var rootContainer: LinearLayout = LinearLayout(appContext).apply {
orientation = LinearLayout.VERTICAL
layoutParams = FlexboxLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
).apply {
// 添加居中设置
gravity = Gravity.CENTER_HORIZONTAL
}
setLayerType(View.LAYER_TYPE_HARDWARE, null)
}
// 麦位数据
private var pitList: List<RoomPitBean>? = null
// 单麦模式标记
private var isSingleMode = false
private var currentSinglePit = -1
private var singleWheatView: RoomSingSongWheatView? = null
private val multiWheatViews = mutableListOf<RoomSingSongWheatView>()
// 麦位索引映射
private val pitIndexMap = intArrayOf(9, 10, 1, 2, 3, 4, 5, 6, 7, 8)
// 预加载时的尺寸(基于屏幕尺寸预估)
private val preloadWidth: Int by lazy {
appContext.resources.displayMetrics.widthPixels -
appContext.resources.getDimensionPixelSize(R.dimen.dp_5) * 2
}
private val preloadHeight: Int by lazy {
appContext.resources.displayMetrics.heightPixels / 2 // 预估高度为屏幕一半
}
// 初始化时立即执行预绘制
init {
preDrawContainer()
}
/**
* 预绘制容器(核心预加载逻辑)
* 手动触发测量、布局、绘制流程,生成缓存
*/
private fun preDrawContainer() {
// 1. 测量使用预估尺寸AT_MOST模式适配wrap_content
rootContainer.measure(
View.MeasureSpec.makeMeasureSpec(preloadWidth, View.MeasureSpec.AT_MOST),
View.MeasureSpec.makeMeasureSpec(preloadHeight, View.MeasureSpec.AT_MOST)
)
// 2. 布局指定位置左上角为0,0
rootContainer.layout(
0,
0,
rootContainer.measuredWidth,
rootContainer.measuredHeight
)
// 3. 绘制:强制触发绘制,生成缓存
rootContainer.draw(Canvas())
}
/**
* 获取预绘制好的根容器供外部添加到FlexboxLayout
*/
fun getRootContainer(): LinearLayout = rootContainer
/**
* 设置麦位数据并刷新视图
*/
fun setWheatData(pitList: List<RoomPitBean>?) {
this.pitList = pitList
restoreMultiWheat()
// 数据更新后重新预绘制,确保缓存同步
preDrawContainer()
}
/**
* 为麦位视图设置点击事件(确保使用最新的 wheatClickListener
*/
private fun setupViewListeners(wheatView: RoomSingSongWheatView, pitNumber: Int) {
// 头像点击事件
val avatarView = wheatView.mRiv as CircularImage
avatarView.setOnClickListener {
// 直接使用当前的 wheatClickListener可能已被外部设置
wheatClickListener?.onWheatClick(wheatView, pitNumber)
}
// 魅力值点击事件
val charmView = wheatView.mCharmView
charmView.setOnClickListener {
ToastUtils.show("点击了麦位")
wheatClickListener?.onMeilingClick(wheatView, pitNumber)
}
// 整体点击事件
wheatView.setOnClickListener {
wheatClickListener?.onMeilingClick(wheatView, wheatView.pitNumber.toInt())
}
}
/**
* 设置麦位点击监听器(关键修改:设置后为已有视图重新绑定事件)
*/
fun setOnWheatClickListener(@Nullable listener: OnWheatClickListener?) {
this.wheatClickListener = listener
// 为已创建的所有麦位视图重新绑定点击事件(此时 listener 已生效)
multiWheatViews.forEach { view ->
val pitNumber = view.pitNumber.toIntOrNull() ?: return@forEach
setupViewListeners(view, pitNumber)
}
}
/**
* 恢复多麦模式布局
*/
private fun restoreMultiWheat() {
// 清空现有视图(保留缓存逻辑)
val screenWidth = getScreenWidth()
val itemWidth = screenWidth / 4.2
var row = createHorizontalRow()
if (multiWheatViews.size == 10) {
// 复用已有视图,仅更新数据
multiWheatViews.forEachIndexed { i, view ->
if (pitList != null) {
view.setData(pitList!![pitIndexMap[i] - 1])
}
}
} else {
// 创建新视图
for (i in 0 until 10) {
val pitNumber = pitIndexMap[i]
val wheatView = RoomSingSongWheatView(appContext).apply {
this.pitNumber = pitNumber.toString()
if (pitList != null) {
setData(pitList!![pitNumber - 1])
}
}
multiWheatViews.add(wheatView)
var params: LinearLayout.LayoutParams? = null
if (i == 0) {
val fixedHeightInDp = 110 // 固定高度为 100dp
val fixedHeightInPx = dpToPx(fixedHeightInDp) // 调用已有的 dpToPx 方法
// 第一个控件:左边距 86dp右边距 100dp
params = LinearLayout.LayoutParams(itemWidth.toInt(), fixedHeightInPx)
params.rightMargin = dpToPx(50)
} else if (i == 1) {
val fixedHeightInDp = 110 // 固定高度为 100dp
val fixedHeightInPx = dpToPx(fixedHeightInDp) // 调用已有的 dpToPx 方法
// 第二个控件:右边距 86dp
params = LinearLayout.LayoutParams(itemWidth.toInt(), fixedHeightInPx)
} else {
val fixedHeightInDp = 90 // 固定高度为 100dp
val fixedHeightInPx = dpToPx(fixedHeightInDp) // 调用已有的 dpToPx 方法
params = LinearLayout.LayoutParams(itemWidth.toInt() - 30, fixedHeightInPx + 30)
// 其他控件保持原有逻辑
params.setMargins(0, 0, 0, 0) // 不设右边距,由 row padding 控制
}
// val params = getLayoutParams(i, itemWidth.toInt())
wheatView.layoutParams = params
// 设置点击事件
setupViewListeners(wheatView, pitNumber)
row.addView(wheatView)
// 换行逻辑
handleRowBreak(i, row) { newRow -> row = newRow }
}
// 添加最后一行剩余视图
if (row.childCount > 0) {
rootContainer.addView(row)
}
isSingleMode = false
currentSinglePit = -1
}
}
/**
* 恢复PK模式下的多麦布局
*/
fun restoreMultiWheatPk(layoutType: Int) {
try {
if (layoutType == 1) {
rootContainer.removeAllViews()
}
} catch (e: Exception) {
return
}
val pitList = this.pitList ?: return
if (pitList.size < 10) return
val screenWidth = getScreenWidth()
val itemWidth = screenWidth / 8
var row = createHorizontalRow()
// 调整前两个麦位顺序
val (firstPit, secondPit) = when (layoutType) {
1 -> Pair(10, 9)
2 -> Pair(9, 10)
else -> Pair(9, 10)
}
// 添加前两个麦位
addWheatViewItem(row, firstPit, itemWidth * 2, layoutType)
addWheatViewItem(row, secondPit, itemWidth * 2, layoutType)
rootContainer.addView(row)
row = createHorizontalRow()
// 添加剩余8个麦位
for (i in 2 until 10) {
val pitNumber = pitIndexMap[i]
addWheatViewItem(row, pitNumber, itemWidth, layoutType)
if (i > 1 && (i - 2) % 4 == 3) {
rootContainer.addView(row)
row = createHorizontalRow()
}
}
if (row.childCount > 0) {
rootContainer.addView(row)
}
isSingleMode = false
currentSinglePit = -1
// 预绘制更新
preDrawContainer()
}
/**
* 添加单个麦位视图到行布局
*/
private fun addWheatViewItem(
row: LinearLayout,
pitNumber: Int,
itemWidth: Int,
layoutType: Int
) {
val pitList = this.pitList ?: return
val wheatView = RoomSingSongWheatView(appContext).apply {
this.pitNumber = pitNumber.toString()
setData(pitList[pitNumber - 1])
}
val params = when (pitNumber) {
9, 10 -> {
val fixedHeight = appContext.resources.getDimensionPixelSize(R.dimen.dp_90)
if (pitNumber == 9) {
LinearLayout.LayoutParams(itemWidth - 40, fixedHeight).apply {
if (layoutType == 1) {
rightMargin = appContext.resources.getDimensionPixelSize(R.dimen.dp_1)
setMargins(20, -30, -20, 0)
} else {
leftMargin = appContext.resources.getDimensionPixelSize(R.dimen.dp_1)
setMargins(-30, -20, 0, 0)
}
}
} else {
LinearLayout.LayoutParams(itemWidth - 80, fixedHeight).apply {
if (layoutType == 1) {
setMargins(-30, 10, 0, 0)
} else {
setMargins(0, 10, -30, 0)
}
}
}
}
else -> {
val fixedHeight = appContext.resources.getDimensionPixelSize(R.dimen.dp_60)
LinearLayout.LayoutParams(itemWidth + 15, fixedHeight + 20).apply {
setMargins(-20, -20, -20, 0)
}
}
}
wheatView.layoutParams = params
wheatView.setOnClickListener {
wheatClickListener?.let { listener ->
val pitNum = wheatView.pitNumber.toInt()
if (layoutType == 1) {
listener.onWheatClick(wheatView, pitNum)
} else {
listener.onMakeWheatClick(wheatView, pitNum)
}
}
}
row.addView(wheatView)
}
/**
* 创建水平方向的行布局
*/
private fun createHorizontalRow(): LinearLayout {
return LinearLayout(appContext).apply {
orientation = LinearLayout.HORIZONTAL
layoutParams = LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
).apply {
// 添加行内居中
gravity = Gravity.CENTER_HORIZONTAL
}
}
}
/**
* 获取麦位视图的布局参数
*/
private fun getLayoutParams(index: Int, itemWidth: Int): LinearLayout.LayoutParams {
return when (index) {
0 -> {
LinearLayout.LayoutParams((itemWidth * 1.7).toInt(), dpToPx(110)).apply {
// 移除右间距,通过容器居中自动平衡
rightMargin = (getScreenWidth() - ((itemWidth * 1.7).toInt() * 2)) / 2
}
}
1 -> {
LinearLayout.LayoutParams((itemWidth * 1.7).toInt(), dpToPx(110))
}
else -> {
val margin = (getScreenWidth() - (itemWidth * 4)) / 4 / 2
// 统一边距逻辑
LinearLayout.LayoutParams((itemWidth *1.3).toInt() , dpToPx(110)).apply {
setMargins(0, 0, 0, 0)
}
}
}
}
/**
* 处理换行逻辑
*/
private fun handleRowBreak(
index: Int,
currentRow: LinearLayout,
newRowCallback: (LinearLayout) -> Unit
) {
when {
index == 1 -> {
rootContainer.addView(currentRow)
newRowCallback(createHorizontalRow())
}
index > 1 && (index - 2) % 4 == 3 -> {
rootContainer.addView(currentRow)
newRowCallback(createHorizontalRow())
}
}
}
/**
* 创建麦位视图
*/
private fun createWheatView(pitNumber: Int): RoomSingSongWheatView {
val pitList = this.pitList ?: throw IllegalArgumentException("pitList is null")
return RoomSingSongWheatView(appContext).apply {
this.pitNumber = pitNumber.toString()
setData(pitList[pitNumber - 1])
}
}
/**
* 创建申请麦位视图
*/
private fun createRoomMakeWheatView(pitNumber: Int): RoomMakeWheatView {
val pitList = this.pitList ?: throw IllegalArgumentException("pitList is null")
return RoomMakeWheatView(appContext).apply {
this.pitNumber = pitNumber.toString()
setData(pitList[pitNumber - 1])
}
}
/**
* dp转px
*/
private fun dpToPx(dp: Int): Int {
return (dp * appContext.resources.displayMetrics.density).roundToInt()
}
/**
* 获取屏幕宽度
*/
private fun getScreenWidth(): Int {
return appContext.resources.displayMetrics.widthPixels
}
/**
* 更新麦位交换数据
*/
fun setUpData(event: RoomMessageEvent) {
val fromPit = event.text.from_pit_number ?: return
val toPitNumber = event.text.to_pit_number ?: return
val fromWheatView = findWheatViewByPitNumber(fromPit.toInt())
val toWheatView = findWheatViewByPitNumber(toPitNumber.toInt())
if (fromWheatView == null || toWheatView == null) return
// 交换麦位数据
val fromPitBean = fromWheatView.pitBean
val toPitBean = toWheatView.pitBean
val tmpNumber = fromPitBean.pit_number
fromPitBean.pit_number = toPitBean.pit_number
toPitBean.pit_number = tmpNumber
toWheatView.setData(fromPitBean)
fromWheatView.setData(toPitBean)
// 清空原麦位数据
multiWheatViews.forEach { view ->
if (view.pitBean.user_id == event.text.fromUserInfo.user_id.toString() &&
view.pitBean.pit_number != toPitNumber
) {
view.pitBean.apply {
charm = ""
user_id = ""
dress = ""
avatar = ""
nickname = ""
sex = ""
user_code = ""
dress_picture = ""
mic_cycle = ""
}
view.setData(view.pitBean)
}
}
// 预绘制更新
preDrawContainer()
}
/**
* 更新单个麦位信息
*/
fun updateSingleWheat(pitBean: RoomPitBean, pitNumber: Int) {
if (pitNumber < 1 || pitNumber > 10) return
if (isSingleMode && currentSinglePit != pitNumber) return
findWheatViewByPitNumber(pitNumber)?.setData(pitBean)
// 预绘制更新
preDrawContainer()
}
/**
* 更新麦位魅力值
*/
fun upDataCharm(pitBean: RoomPitBean, pitNumber: Int) {
if (pitNumber < 1 || pitNumber > 10) return
if (isSingleMode && currentSinglePit != pitNumber) return
findWheatViewByPitNumber(pitNumber)?.setCharm(pitBean.charm)
// 预绘制更新
preDrawContainer()
}
/**
* 根据麦位号查找视图
*/
@Nullable
private fun findWheatViewByPitNumber(pitNumber: Int): RoomSingSongWheatView? {
for (i in 0 until rootContainer.childCount) {
val row = rootContainer.getChildAt(i)
when (row) {
is LinearLayout -> {
for (j in 0 until row.childCount) {
val child = row.getChildAt(j)
if (child is RoomSingSongWheatView && child.pitNumber.toInt() == pitNumber) {
return child
}
}
}
is RoomSingSongWheatView -> {
if (row.pitNumber.toInt() == pitNumber) {
return row
}
}
}
}
return null
}
/**
* 释放资源
*/
fun release() {
try {
// 释放子视图资源
multiWheatViews.forEach { it.releaseResources() }
multiWheatViews.clear()
// 清空容器
rootContainer.removeAllViews()
// 从父布局移除自身
(rootContainer.parent as? ViewGroup)?.removeView(rootContainer)
// 清除绘制缓存
rootContainer.setLayerType(View.LAYER_TYPE_NONE, null)
} catch (e: Exception) {
// 忽略异常
}
// 清空数据引用
pitList = null
singleWheatView = null
wheatClickListener = null
}
/**
* 麦位点击事件接口
*/
interface OnWheatClickListener {
fun onWheatClick(view: RoomSingSongWheatView, pitNumber: Int)
fun onMakeWheatClick(view: RoomSingSongWheatView, pitNumber: Int)
fun onMeilingClick(view: RoomSingSongWheatView, pitNumber: Int)
}
@Nullable
private var wheatClickListener: OnWheatClickListener? = null
/**
* 单例实现
*/
companion object {
@SuppressLint("StaticFieldLeak")
@Volatile
private var instance: WheatLayoutSingManager? = null
/**
* 初始化单例(预加载视图)
* 建议在Application.onCreate()中调用
*/
fun init(context: Context) {
if (instance == null) {
synchronized(WheatLayoutSingManager::class.java) {
if (instance == null) {
instance = WheatLayoutSingManager(context.applicationContext)
}
}
}
}
/**
* 获取单例实例
* 必须先调用init()初始化
*/
fun getInstance(): WheatLayoutSingManager {
return instance
?: throw IllegalStateException("请先调用init()初始化WheatLayoutSingManager")
}
/**
* 销毁单例(退出应用时调用)
*/
fun destroyInstance() {
instance?.release()
instance = null
}
}
private var svgaVideoItem: SVGAVideoEntity? = null
fun bindSvga(view: SVGAImageView, context: Context, assetName: String) {
if (svgaVideoItem == null) {
val parser = SVGAParser(context)
parser.decodeFromAssets(assetName, object : SVGAParser.ParseCompletion {
override fun onComplete(videoItem: SVGAVideoEntity) {
// videoItem 可能为 null按需处理
videoItem.let {
svgaVideoItem = it
view.setVideoItem(it)
view.startAnimation()
}
}
override fun onError() {
// 解析失败的处理
Log.e("SVGA", "decodeFromAssets error: $assetName")
}
})
} else {
view.setVideoItem(svgaVideoItem)
view.startAnimation()
}
}
fun releaseFromParent() {
rootContainer.let { container ->
(container.parent as? ViewGroup)?.removeView(container)
}
}
}

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 用item标签限制整体尺寸maxWidth=100dpheight=10dp与tabIndicatorHeight一致 -->
<item
android:height="@dimen/dp_25"
android:gravity="center"
android:maxWidth="@dimen/dp_20">
<!-- 最大宽度(根据需求调整) -->
<!-- 固定高度与tabIndicatorHeight匹配 -->
<!-- 图片在item内居中 -->
<!-- 嵌套bitmap设置图片资源和缩放模式 -->
<bitmap
android:dither="true"
android:scaleType="center"
android:src="@mipmap/tab_dy" />
<!-- 你的图片资源 -->
<!-- 等比例缩放确保图片在maxWidth和height内完整显示 -->
<!-- 抗锯齿优化 -->
</item>
</layer-list>

View File

@@ -1,281 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.main.activity.MainActivity">
<data>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/fly_bottom_btn"
android:clipChildren="false" />
<FrameLayout
android:id="@+id/fly_bottom_btn"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:layout_alignParentBottom="true"
android:background="@color/transparent"
android:clipChildren="false">
<LinearLayout
android:id="@+id/ll_bottom_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/home_bbar_yuan"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/rl_media"
android:layout_width="@dimen/dp_0"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_2"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/im_sy"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:gravity="center_horizontal"
android:scaleType="fitXY"
android:src="@drawable/main_bottom_bar_icon_media" />
<TextView
android:id="@+id/tv_media"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:text="@string/main_tab1"
android:textColor="@drawable/text_color_two"
android:textSize="@dimen/sp_10" />
</LinearLayout>
<LinearLayout
android:id="@+id/rl_trend"
android:layout_width="@dimen/dp_0"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_2"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/im_trend"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:gravity="center_horizontal"
android:scaleType="fitXY"
android:src="@drawable/main_bottom_bar_icon_tend" />
<TextView
android:id="@+id/tv_trend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:text="@string/main_tab2"
android:textColor="@drawable/text_color_two"
android:textSize="@dimen/sp_10" />
</LinearLayout>
<LinearLayout
android:id="@+id/rl_news"
android:layout_width="@dimen/dp_0"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_2"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-3dp">
<ImageView
android:id="@+id/iv_news"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dp"
android:gravity="center_horizontal"
android:scaleType="fitXY"
android:src="@drawable/main_bottom_bar_icon_news" />
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_toRightOf="@+id/iv_news"
android:background="@drawable/ease_bg_msg_count"
android:gravity="center"
android:paddingLeft="@dimen/dp_5"
android:paddingTop="1.5dp"
android:paddingRight="@dimen/dp_5"
android:paddingBottom="2dp"
android:textColor="@color/white"
android:textSize="@dimen/sp_8"
android:visibility="gone"
tools:text="99+"
tools:visibility="visible" />
</RelativeLayout>
<TextView
android:id="@+id/tv_news"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/iv_news"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_2"
android:text="@string/main_tab3"
android:textColor="@drawable/text_color_two"
android:textSize="@dimen/sp_10" />
</LinearLayout>
<LinearLayout
android:id="@+id/rl_me"
android:layout_width="@dimen/dp_0"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_2"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/im_me"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:gravity="center_horizontal"
android:scaleType="fitXY"
android:src="@drawable/main_bottom_bar_icon_me" />
<TextView
android:id="@+id/tv_me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:text="@string/main_tab4"
android:textColor="@drawable/text_color_two"
android:textSize="@dimen/sp_10" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
<com.xscm.moduleutil.widget.DropView
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_52"
android:layout_marginBottom="@dimen/dp_100"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="gone"
tools:visibility="visible">
<com.xscm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/riv"
android:layout_width="@dimen/dp_45"
android:layout_height="@dimen/dp_45"
android:layout_gravity="center_vertical"
android:layout_margin="@dimen/dp_4"
android:src="@mipmap/default_avatar"
app:gav_border_color="#FFF"
app:gav_border_width="@dimen/dp_2"
app:riv_border_color="#FFF"
app:riv_border_width="@dimen/dp_2"
app:riv_oval="true" />
<View
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/dp_7"
android:layout_marginRight="@dimen/dp_7"
android:background="#FFFFFFFF"
android:visibility="visible" />
<ImageView
android:id="@+id/iv_guanbi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="@dimen/dp_14"
android:src="@mipmap/icon_guanbi" />
</com.xscm.moduleutil.widget.DropView>
<!-- <ImageView-->
<!-- android:id="@+id/iv_shouchl"-->
<!-- android:layout_width="@dimen/dp_57"-->
<!-- android:layout_height="@dimen/dp_57"-->
<!-- android:layout_alignParentBottom="true"-->
<!-- android:layout_alignParentEnd="true"-->
<!-- android:layout_marginEnd="@dimen/dp_20"-->
<!-- android:layout_marginBottom="@dimen/dp_100"-->
<!-- android:src="@mipmap/shouchl"/>-->
<com.xscm.moduleutil.widget.DropHomeView
android:id="@+id/dvr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="gone"
tools:visibility="visible">
<com.stx.xhb.xbanner.XBanner
android:id="@+id/banner"
android:layout_width="@dimen/dp_75"
android:layout_height="@dimen/dp_85"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="@dimen/dp_20"
android:clickable="true"
android:focusable="true"
android:scaleType="fitCenter"
app:AutoPlayTime="3000"
app:pageChangeDuration="3000"
app:pointContainerPosition="BOTTOM"
app:pointNormal="@mipmap/room_ic_banner_point_normal"
app:pointSelect="@mipmap/room_ic_banner_point_select"
app:pointTopBottomPadding="@dimen/dp_2"
app:pointsPosition="CENTER"
app:pointsVisibility="true" />
</com.xscm.moduleutil.widget.DropHomeView>
<RelativeLayout
android:id="@+id/cool_wait_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true"
android:visibility="gone">
<app.dinus.com.loadingdrawable.LoadingView
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:background="@drawable/ps_ic_shadow_bg"
app:loading_renderer="CoolWaitLoadingRenderer" />
</RelativeLayout>
</RelativeLayout>
</layout>

View File

@@ -1,194 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
tools:context=".activity.NobleDetailsActivity">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/noble_details_bj">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_back"
android:layout_width="0dp"
android:layout_height="0dp"
android:contentDescription="@null"
android:scaleType="centerInside"
android:src="@mipmap/ic_topbar_back_dark"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_noble_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_intent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_16"
android:src="@mipmap/icon_noble_gz"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_noble_lv"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_44"
android:layout_marginTop="@dimen/dp_8"
android:textSize="@dimen/dp_34"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/top_bar"
tools:text="骑士" />
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_200"
android:layout_marginTop="@dimen/dp_8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_noble_lv" />
<ImageView
android:id="@+id/im_noble_tq"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/noble_details_tq"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/banner" />
<TextView
android:id="@+id/tv_tq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFEDBD"
android:textSize="@dimen/sp_16"
app:layout_constraintBottom_toBottomOf="@+id/im_noble_tq"
app:layout_constraintEnd_toEndOf="@+id/im_noble_tq"
app:layout_constraintStart_toStartOf="@+id/im_noble_tq"
app:layout_constraintTop_toTopOf="@+id/im_noble_tq"
tools:text="专属特权" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_8"
android:paddingTop="@dimen/dp_8"
app:layout_constraintBottom_toTopOf="@+id/im_kt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_tq">
<com.xscm.moduleutil.widget.MyGridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:numColumns="3"
android:horizontalSpacing="@dimen/dp_8"
android:paddingStart="@dimen/dp_14"
android:paddingEnd="@dimen/dp_15"
android:paddingBottom="@dimen/dp_8"
android:verticalSpacing="4.5dp"
tools:listitem="@layout/item_noble_tq" />
</ScrollView>
<!-- <GridView-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- app:layout_constraintTop_toBottomOf="@+id/tv_tq"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintBottom_toTopOf="@+id/im_kt"-->
<!-- tools:listitem="@layout/item_noble_tq"-->
<!-- android:layout_marginTop="@dimen/dp_16"-->
<!-- android:layout_marginBottom="@dimen/dp_5"-->
<!-- android:horizontalSpacing="8dp"-->
<!-- android:verticalSpacing="8dp"-->
<!-- android:paddingStart="@dimen/dp_15"-->
<!-- android:paddingEnd="@dimen/dp_15"-->
<!-- android:paddingBottom="@dimen/dp_8"-->
<!-- android:clipToPadding="false"-->
<!-- android:id="@+id/gridView"-->
<!-- android:numColumns="3"-->
<!-- />-->
<ImageView
android:id="@+id/im_kt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/noble_kt"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_lv_tis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:textColor="#F7EAC9"
android:textSize="@dimen/sp_16"
app:layout_constraintBottom_toBottomOf="@+id/im_kt"
app:layout_constraintStart_toStartOf="@+id/im_kt"
app:layout_constraintTop_toTopOf="@+id/im_kt"
tools:text="骑士开通" />
<TextView
android:id="@+id/tv_noble_mob"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#F7EAC9"
android:textSize="@dimen/sp_16"
app:layout_constraintBottom_toBottomOf="@+id/tv_lv_tis"
app:layout_constraintStart_toEndOf="@+id/tv_lv_tis"
app:layout_constraintTop_toTopOf="@+id/tv_lv_tis"
tools:text="¥30/月" />
<ImageView
android:id="@+id/im_ljkt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_16"
android:src="@mipmap/noble_ljkt"
app:layout_constraintBottom_toBottomOf="@+id/im_kt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/im_kt" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,269 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.NobleTitleActivity">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/noble_bj">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_back"
android:layout_width="0dp"
android:layout_height="0dp"
android:contentDescription="@null"
android:scaleType="centerInside"
android:src="@mipmap/ic_topbar_back_dark"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_noble_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_intent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_16"
android:src="@mipmap/icon_noble_gz"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.xscm.moduleutil.widget.CircularImage
android:id="@+id/ci_user_image"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_16"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/top_bar"
tools:src="@mipmap/ic_launcher_foreground" />
<TextView
android:id="@+id/tv_user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_6"
android:textColor="#F5E9D1"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="@+id/ci_user_image"
app:layout_constraintStart_toEndOf="@+id/ci_user_image"
app:layout_constraintTop_toTopOf="@+id/ci_user_image"
tools:text="用户名" />
<TextView
android:id="@+id/tv_user_lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#F5E9D1"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="@+id/tv_user_name"
app:layout_constraintStart_toEndOf="@+id/tv_user_name"
app:layout_constraintTop_toTopOf="@+id/tv_user_name"
tools:text="Lv.1" />
<ImageView
android:id="@+id/im_me_noble"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_94"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_15"
android:scaleType="fitXY"
android:src="@mipmap/me_noble_bj"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ci_user_image" />
<TextView
android:id="@+id/tv_me_noble_lv"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_44"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_8"
android:fontFamily="@font/youshebiaotihei"
android:textSize="@dimen/sp_34"
android:visibility="gone"
app:layout_constraintStart_toStartOf="@+id/im_me_noble"
app:layout_constraintTop_toTopOf="@+id/im_me_noble"
tools:text="Lv.1"
tools:visibility="visible" />
<ImageView
android:id="@+id/im_me_noble_status"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_36"
android:layout_marginStart="@dimen/dp_13"
android:layout_marginTop="@dimen/dp_13"
android:scaleType="fitCenter"
app:layout_constraintStart_toStartOf="@+id/im_me_noble"
app:layout_constraintTop_toTopOf="@+id/im_me_noble"
tools:src="@mipmap/me_noble_no"
tools:visibility="gone" />
<ImageView
android:id="@+id/im_me_noble_xf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:src="@mipmap/me_noble_xf"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/tv_me_noble_lv"
app:layout_constraintStart_toEndOf="@+id/tv_me_noble_lv"
app:layout_constraintTop_toTopOf="@+id/tv_me_noble_lv"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_user_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_12"
android:textColor="#F5E9D1"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="@+id/im_me_noble"
app:layout_constraintStart_toStartOf="@+id/im_me_noble_status"
tools:text="未开通" />
<ImageView
android:id="@+id/im_noble_db"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_15"
android:scaleType="fitCenter"
android:src="@mipmap/noble_duib"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/im_me_noble" />
<ImageView
android:id="@+id/im_noble"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_13"
android:scaleType="fitXY"
android:src="@mipmap/me_noble_image"
app:layout_constraintEnd_toEndOf="@+id/im_me_noble"
app:layout_constraintTop_toBottomOf="@+id/top_bar" />
<!-- <androidx.cardview.widget.CardView-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="@dimen/dp_0"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@+id/im_noble_db"-->
<!-- android:layout_marginTop="@dimen/dp_13"-->
<!-- android:layout_marginStart="@dimen/dp_16"-->
<!-- android:layout_marginEnd="@dimen/dp_16"-->
<!-- app:cardCornerRadius="@dimen/dp_12"-->
<!-- app:cardElevation="@dimen/dp_1"-->
<!-- app:cardBackgroundColor="@android:color/transparent"-->
<!-- >-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_13"
android:layout_marginEnd="@dimen/dp_16"
android:background="@drawable/noble_card_border"
app:layout_constraintBottom_toTopOf="@+id/im_kt"
app:layout_constraintTop_toBottomOf="@+id/im_noble_db">
<LinearLayout
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/dp_12"
android:background="@drawable/bg_r6_2a2a4e"
android:orientation="vertical" />
</FrameLayout>
<!-- </androidx.cardview.widget.CardView>-->
<ImageView
android:id="@+id/im_kt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/me_sj"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible" />
<com.xscm.moduleutil.widget.CircularImage
android:id="@+id/ci_image2"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginStart="@dimen/dp_12"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/im_kt"
app:layout_constraintStart_toStartOf="@+id/im_kt"
app:layout_constraintTop_toTopOf="@+id/im_kt"
tools:src="@mipmap/ic_launcher"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_me_x"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_6"
android:ellipsize="end"
android:maxEms="12"
android:maxLines="1"
android:singleLine="true"
android:textColor="#F5E9D1"
android:textSize="@dimen/sp_12"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/im_kt"
app:layout_constraintStart_toEndOf="@+id/ci_image2"
app:layout_constraintTop_toTopOf="@+id/im_kt"
tools:text="夏沫..的当前爵位状态是骑"
tools:visibility="visible" />
<ImageView
android:id="@+id/im_sj"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_36"
android:layout_marginEnd="@dimen/dp_16"
android:src="@mipmap/noble_sj"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/im_kt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/im_kt"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.RankingListActivity">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@mipmap/ranking_bj"
android:orientation="vertical">
<com.xscm.moduleutil.widget.CustomTopBar
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginRight="@dimen/dp_10"
app:tabIndicator="@drawable/tab_indicator_bottom"
app:tabIndicatorColor="@null"
app:tabIndicatorGravity="bottom"
app:tabMode="fixed"
app:tabSelectedTextColor="@color/white"
app:tabTextAppearance="@style/CustomTabTextAppearance"
app:tabTextColor="@color/white" />
<com.xscm.moduleutil.widget.ScrollViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tabs" />
</LinearLayout>
</layout>

View File

@@ -1,131 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.ReleaseActivity">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_FFF8F8F8">
<com.xscm.moduleutil.widget.CustomTopBar
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:layout_constraintTop_toTopOf="parent"/>
<RelativeLayout
android:id="@+id/rl_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
android:background="@drawable/bg_r16_ffeff2f8"
app:layout_constraintTop_toBottomOf="@+id/top_bar">
<TextView
android:id="@+id/tv_ht"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_9"
android:layout_marginBottom="@dimen/dp_9"
android:gravity="center"
android:text="选择话题"
android:textColor="@color/color_FF333333"
android:textSize="16sp"/>
<ImageView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
android:layout_alignParentEnd="true"
android:layout_centerInParent="true"
android:layout_marginEnd="@dimen/dp_12"
android:src="@mipmap/up_t"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_2"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_180"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_16"
android:background="@drawable/bg_r10_white"
app:layout_constraintTop_toBottomOf="@+id/rl_1">
<EditText
android:id="@+id/et_g"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_140"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_7"
android:layout_marginEnd="@dimen/dp_12"
android:background="@android:color/transparent"
android:gravity="left|top"
android:hint="此刻想和大家分享点什么"
android:maxLength="1200"
android:textColor="#333333"
android:textColorHint="@color/color_FF999999"
android:textSize="@dimen/sp_15"/>
<TextView
android:id="@+id/tv_sz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_12"
android:layout_below="@+id/et_g"
android:gravity="bottom"
android:text="0/1200"
android:textColor="@color/color_FF666666"
android:textSize="@dimen/sp_12"/>
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_photo_wall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_16"
app:layout_constraintTop_toBottomOf="@+id/rl_2"/>
<TextView
android:id="@+id/tv_fb"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_42"
android:layout_marginStart="@dimen/dp_38"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_38"
android:background="@drawable/cs"
android:gravity="center"
android:text="立即发布"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_14"
app:layout_constraintTop_toBottomOf="@+id/rv_photo_wall"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,738 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.RoomActivity">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:background="@color/transparent"
android:clipChildren="false"
android:clipToPadding="false"
android:keepScreenOn="true">
<com.xscm.moduleutil.widget.DropHourlView
android:id="@+id/cl_xsb"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_60"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_100"
android:background="@mipmap/room_xsb"
android:elevation="4dp"
android:gravity="right"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<!-- android:background="@mipmap/room_xsb"-->
<TextView
android:id="@+id/tv_xlh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center"
android:gravity="center|right"
android:paddingEnd="@dimen/dp_4"
android:text="小时榜"
android:textColor="@color/white"
android:textSize="13sp" />
</com.xscm.moduleutil.widget.DropHourlView>
<com.xscm.moduleutil.widget.DropRedView
android:id="@+id/drv_red"
android:layout_width="@dimen/dp_65"
android:layout_height="@dimen/dp_65"
android:layout_marginTop="@dimen/dp_160"
android:elevation="4dp"
android:gravity="center"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<ImageView
android:id="@+id/red_bj"
android:layout_width="@dimen/dp_58"
android:layout_height="@dimen/dp_58"
android:layout_gravity="center"
android:scaleType="fitCenter"
android:src="@mipmap/red_bj" />
<TextView
android:id="@+id/red_num"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_gravity="top|end"
android:layout_marginStart="-20dp"
android:layout_marginTop="@dimen/dp_5"
android:textColor="#FFFEB2"
android:textSize="14sp"
android:visibility="invisible"
tools:text="x0"
tools:visibility="visible" />
</com.xscm.moduleutil.widget.DropRedView>
<com.xscm.moduleutil.widget.DropDayTaskView
android:id="@+id/cl_day_task"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:elevation="4dp"
android:gravity="right"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<!-- android:background="@mipmap/room_xsb"-->
<ImageView
android:id="@+id/im_day_task"
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_60"
android:scaleType="fitCenter"
android:src="@mipmap/day_task" />
</com.xscm.moduleutil.widget.DropDayTaskView>
<ImageView
android:id="@+id/iv_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="centerCrop"
android:src="@mipmap/room_bj"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_bg_mask"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/color_40000000"
android:scaleType="centerCrop"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include
android:id="@+id/room_top"
layout="@layout/room_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_35"
android:clipChildren="false"
android:clipToPadding="false"
android:elevation="2dp"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/main_content_container"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_15"
android:clipChildren="false"
android:clipToPadding="false"
app:layout_constraintBottom_toTopOf="@+id/ll_bottom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/room_top">
<FrameLayout
android:id="@+id/vp_room_pager"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="@dimen/dp_10"
android:clipChildren="false"
android:clipToPadding="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/ease_container"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vp_room_pager">
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/svga_ride"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="@dimen/dp_80" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.xscm.moduleutil.widget.RoomMessageInputMenu
android:id="@+id/input_menu1"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<LinearLayout
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_15"
android:animateLayoutChanges="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
app:layout_constraintBottom_toTopOf="@+id/input_menu1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<LinearLayout
android:layout_width="0dp"
android:layout_height="@dimen/dp_36"
android:layout_weight="1.4"
android:background="@drawable/room_bottom_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="@dimen/dp_5"
android:paddingRight="@dimen/dp_5">
<ImageView
android:id="@+id/iv_emoji"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_marginLeft="@dimen/dp_5"
android:src="@mipmap/xiaox_bq" />
<TextView
android:id="@+id/iv_chat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:text="说点什么"
android:textColor="#80ffffff"
android:textSize="@dimen/sp_13" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="0.2" />
<RelativeLayout
android:id="@+id/rl_voive"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="0.3">
<ImageView
android:id="@+id/im_voive"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:src="@mipmap/room_voice_kg" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_mic"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="0.3"
android:gravity="center_vertical">
<ImageView
android:id="@+id/iv_mic"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:src="@mipmap/room_microphone_off"
android:visibility="visible"
tools:visibility="visible" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="0.3">
<ImageView
android:id="@+id/iv_message"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:src="@mipmap/room_message"
android:visibility="visible" />
<!-- <ImageView-->
<!-- android:id="@+id/iv_message_dot"-->
<!-- android:layout_width="@dimen/dp_14"-->
<!-- android:layout_height="@dimen/dp_14"-->
<!-- android:layout_alignParentEnd="true"-->
<!-- android:src="@mipmap/room_ic_red_dot"-->
<!-- android:visibility="gone"-->
<!-- tools:visibility="visible" />-->
<TextView
android:id="@+id/iv_message_dot"
android:layout_width="@dimen/dp_14"
android:layout_height="@dimen/dp_14"
android:layout_alignParentEnd="true"
android:background="@drawable/ease_bg_msg_count"
android:gravity="center"
android:paddingLeft="@dimen/dp_5"
android:paddingTop="1.5dp"
android:paddingRight="@dimen/dp_5"
android:paddingBottom="2dp"
android:textColor="@color/white"
android:textSize="@dimen/sp_8"
android:visibility="gone"
tools:text="99+"
tools:visibility="visible" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_more"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="0.3">
<ImageView
android:id="@+id/iv_more"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:src="@mipmap/room_pk" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_misc"
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="0.3">
<ImageView
android:id="@+id/iv_misc"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:src="@mipmap/room_mis" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_gift"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="0.3">
<ImageView
android:id="@+id/iv_gift"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:src="@mipmap/room_gift" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_sett"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3">
<ImageView
android:id="@+id/iv_sett"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_centerInParent="true"
android:src="@mipmap/room_sett" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_input"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="horizontal"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/ll_bottom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- </ScrollView>-->
<View
android:id="@+id/svga_gift"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/transparent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--礼物连送图标-->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/gift_show_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="200dp"
android:layout_marginEnd="15dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@+id/cl_first_charge"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<ImageView
android:id="@+id/gift_show_progress_img"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/default_avatar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.xscm.moduleutil.widget.CircularProgressView
android:id="@+id/gift_show_progress"
android:layout_width="60dp"
android:layout_height="60dp"
app:backColor="#FF9800"
app:backWidth="3dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:progColor="#888888"
app:progWidth="3dp"
app:progress="0" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_first_charge"
android:layout_width="@dimen/dp_98"
android:layout_height="@dimen/dp_43"
android:layout_marginBottom="@dimen/dp_14"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/iv_sound_effects"
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible">
<ImageView
android:id="@+id/iv_first_charge"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:src="@mipmap/paimai"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_first_charge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_34"
android:gravity="center"
android:text="排麦模式"
android:textColor="#FFFFFF"
android:textSize="12sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_first_charge"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:textColor="#FFFFFF"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_first_charge"
tools:text="0人排队" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/iv_sound_effects"
android:layout_width="@dimen/dp_56"
android:layout_height="@dimen/dp_27"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginBottom="@dimen/dp_14"
android:src="@mipmap/room_sound_effects"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/iv_wheat_feeding"
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_wheat_feeding"
android:layout_width="@dimen/dp_56"
android:layout_height="@dimen/dp_27"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginBottom="@dimen/dp_100"
android:src="@mipmap/room_wheat_feeding"
android:translationZ="@dimen/dp_2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<!--https://tmd.xscmmidi.site/data/avatar/head_pic.png-->
<com.xscm.moduleutil.widget.DropViewRoom
android:id="@+id/xlh_rk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_100"
android:background="@color/transparent"
android:gravity="center_vertical|center"
android:orientation="vertical"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<ImageView
android:id="@+id/xlh_im"
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:layout_gravity="center_vertical"
android:src="@mipmap/xlh_rk_bj"
app:riv_oval="true" />
<TextView
android:id="@+id/tv_djs"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_gravity="center_vertical"
android:textColor="#FFEBBD"
android:textSize="@dimen/sp_12"
android:visibility="visible"
tools:text="倒计时12:12" />
</com.xscm.moduleutil.widget.DropViewRoom>
<com.xscm.moduleutil.widget.floatingView.Floa
android:id="@+id/flaoat_zuoji"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_65"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="-5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/im_hq">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@mipmap/headline_b"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/head_avate"
android:layout_width="@dimen/dp_28"
android:layout_height="@dimen/dp_28"
android:layout_marginStart="@dimen/dp_26"
android:src="@mipmap/default_avatar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:riv_oval="true" />
<TextView
android:id="@+id/headName"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_4"
android:textColor="#FFFF0B"
android:textSize="@dimen/sp_12"
android:textStyle="bold"
app:layout_constraintStart_toEndOf="@+id/head_avate"
app:layout_constraintTop_toTopOf="parent"
tools:text="名称" />
<TextView
android:id="@+id/head_cone"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_4"
android:gravity="center"
android:textColor="@color/color_FFFFF0F0"
android:textSize="@dimen/sp_12"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/head_avate"
app:layout_constraintTop_toBottomOf="@+id/headName"
tools:text="内容" />
<ImageView
android:id="@+id/iv_quan_qiang"
android:layout_width="@dimen/dp_22"
android:layout_height="@dimen/dp_22"
android:src="@mipmap/tt_q"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/im_yc"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_quan_c"
android:layout_width="@dimen/dp_22"
android:layout_height="@dimen/dp_22"
android:layout_marginEnd="@dimen/dp_8"
android:src="@mipmap/tt_c"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_quan_qiang"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/im_yc"
android:layout_width="@dimen/dp_22"
android:layout_height="@dimen/dp_22"
android:src="@mipmap/tt_yc"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/im_hq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/heab_t"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.xscm.moduleutil.widget.floatingView.Floa>
<FrameLayout
android:id="@+id/fullscreen_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_exit_fullscreen"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_gravity="start|top"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_50"
android:layout_marginBottom="@dimen/dp_46"
android:src="@mipmap/quan"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<com.xscm.moduleutil.widget.floatingView.Floa
android:id="@+id/flaoat"
android:layout_width="@dimen/dp_240"
android:layout_height="@dimen/dp_135"
android:translationZ="1000dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<FrameLayout
android:id="@+id/fl_screenshare"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/iv_quan"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_18"
android:layout_gravity="end|bottom"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginBottom="@dimen/dp_5"
android:src="@mipmap/quan"
android:translationZ="10dp" />
<!-- 自定义内容 -->
</com.xscm.moduleutil.widget.floatingView.Floa>
<FrameLayout
android:id="@+id/gift_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:translationZ="9999dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/room_top" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".fragment.RoomFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_all_layout_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
android:clipChildren="false"
android:clipToPadding="false">
<FrameLayout
android:id="@+id/container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:elevation="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.xscm.moduleutil.widget.AvatarFrameView
android:id="@+id/svga_nobility"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/container"
app:layout_constraintEnd_toEndOf="@id/container"
app:layout_constraintStart_toStartOf="@id/container"
app:layout_constraintTop_toTopOf="@id/container" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,369 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".fragment.RoomKtvFragment">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_277"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_13"
android:layout_marginEnd="@dimen/dp_16"
android:clipChildren="false">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_bj"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/bg_r8_tm"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1.4:1.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/music_poster"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
android:background="#4d000000"
android:scaleType="fitXY"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<!-- <View-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="match_parent"-->
<!-- android:alpha="0.9"-->
<!-- android:background="#90000000"-->
<!-- android:clickable="false"-->
<!-- android:focusable="false"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintDimensionRatio="1.4:1.5"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent" />-->
<TextView
android:id="@+id/tv_jz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_70"
android:text="正在加载..."
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_u_b"
/>
<io.agora.karaoke_view.v11.LyricsView
android:id="@+id/lyrics_view"
android:layout_width="@dimen/dp_184"
android:layout_height="@dimen/dp_130"
android:layout_marginStart="@dimen/dp_12"
android:visibility="gone"
app:currentLineTextColor="@color/white"
app:currentLineTextSize="@dimen/sp_14"
app:labelWhenNoLyrics="暂无歌词"
app:layout_constraintBottom_toTopOf="@+id/mu_x_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_u_b"
app:lineSpacing="8dp"
app:startOfVerseIndicatorPaddingTop="6dp"
app:startOfVerseIndicatorRadius="4dp"
app:textSize="@dimen/sp_12"/>
<TextView
android:id="@+id/mu_title"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12"
android:text="当前播放歌曲:"
android:textColor="@color/color_FFFFF0F0"
android:textSize="@dimen/sp_12"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/mu_name"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_72"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="@color/color_FFFFF0F0"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toEndOf="@+id/mu_title"
app:layout_constraintTop_toTopOf="@+id/mu_title"
tools:text="歌曲名称"/>
<RelativeLayout
android:id="@+id/ll_u_b"
android:layout_width="@dimen/dp_55"
android:layout_height="@dimen/dp_55"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_80"
android:background="@mipmap/muis_bj"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mu_title">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/mu_bj"
android:layout_width="@dimen/dp_25"
android:layout_height="@dimen/dp_25"
android:layout_centerInParent="true"
android:src="@mipmap/default_avatar"
app:riv_oval="true"/>
</RelativeLayout>
<TextView
android:id="@+id/mu_x_title"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_12"
android:text="下一首:"
android:textColor="@color/color_FFFFF0F0"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:id="@+id/mu_x_name"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_12"
android:ellipsize="none"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="@color/color_FFFFF0F0"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toEndOf="@+id/mu_x_title"
app:layout_constraintTop_toTopOf="@+id/mu_x_title"
tools:text="歌曲名称"/>
<com.xscm.moduleutil.widget.RoomKtvWheatView
android:id="@+id/mu_yc"
android:layout_width="@dimen/dp_62"
android:layout_height="@dimen/dp_88"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:room_wheat_number="-1"/>
<com.google.android.flexbox.FlexboxLayout
android:id="@+id/fl_pit_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:flexDirection="column"
app:flexWrap="nowrap"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@+id/mu_yc"
app:layout_constraintTop_toBottomOf="@id/mu_yc">
<LinearLayout
android:id="@+id/ll_bz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_5"
android:orientation="vertical">
<ImageView
android:id="@+id/im_bz"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
android:src="@mipmap/accompany_off"/>
<TextView
android:id="@+id/tv_bz"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_14"
android:layout_gravity="center"
android:gravity="center"
android:text="原唱"
android:textColor="@color/color_white"
android:textSize="@dimen/sp_10"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_ds"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_5"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
android:src="@mipmap/muisc_reward"/>
<TextView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_14"
android:layout_gravity="center"
android:gravity="center"
android:text="打赏"
android:textColor="@color/color_EFEFEF"
android:textSize="@dimen/sp_10"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_qg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_5"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
android:src="@mipmap/muisc_switch"/>
<TextView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_14"
android:layout_gravity="center"
android:gravity="center"
android:text="切歌"
android:textColor="@color/color_EFEFEF"
android:textSize="@dimen/sp_10"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_tiaoyt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_5"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
android:src="@mipmap/muisc_tyt"/>
<TextView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_14"
android:layout_gravity="center"
android:gravity="center"
android:text="调音台"
android:textColor="@color/color_EFEFEF"
android:textSize="@dimen/sp_10"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_sz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_5"
android:orientation="vertical"
android:visibility="gone">
<ImageView
android:layout_width="@dimen/dp_13"
android:layout_height="@dimen/dp_16"
android:layout_gravity="center"
android:src="@mipmap/muisc_set_up"/>
<TextView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_14"
android:layout_gravity="center"
android:gravity="center"
android:text="设置"
android:textColor="@color/color_0DFFB9"
android:textSize="@dimen/sp_10"/>
</LinearLayout>
</com.google.android.flexbox.FlexboxLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.xscm.moduleutil.widget.RoomKtvWheatView
android:id="@+id/mu_zc"
android:layout_width="@dimen/dp_62"
android:layout_height="@dimen/dp_88"
android:layout_marginTop="-25dp"
android:layout_marginEnd="@dimen/dp_5"
android:foreground="?android:attr/selectableItemBackground"
android:translationZ="30dp"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/cl_bj"
app:layout_constraintTop_toTopOf="parent"
app:room_wheat_number="9"
/>
<!-- 在 mu_zc 视图后面添加 -->
<!-- <View-->
<!-- android:id="@+id/mu_zc_touch_overlay"-->
<!-- android:layout_width="@dimen/dp_62"-->
<!-- android:layout_height="@dimen/dp_120"-->
<!-- android:layout_marginTop="-70dp"-->
<!-- android:layout_marginEnd="@dimen/dp_5"-->
<!-- android:background="@android:color/transparent"-->
<!-- android:clickable="true"-->
<!-- android:focusable="true"-->
<!-- app:layout_constraintDimensionRatio="1:1"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:layout_constraintStart_toEndOf="@+id/cl_bj" />-->
<com.xscm.moduleutil.widget.RoomKtvWheatView
android:id="@+id/mu_jb"
android:layout_width="@dimen/dp_62"
android:layout_height="@dimen/dp_88"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginEnd="@dimen/dp_5"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/cl_bj"
app:layout_constraintTop_toBottomOf="@+id/mu_zc"
app:room_wheat_number="10"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="@dimen/dp_58"
android:layout_height="0dp"
android:paddingEnd="@dimen/dp_5"
android:layout_marginBottom="-100dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/cl_bj"
app:layout_constraintTop_toBottomOf="@+id/mu_jb"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.0"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,44 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".dialog.RoomOnlineDialogFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_r16_fff"
android:orientation="vertical">
<TextView
android:id="@+id/tv_num"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_24"
android:layout_marginTop="@dimen/dp_27"
android:gravity="center"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
tools:text="在线用户(0)" />
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/srl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_5"
app:srlEnableLoadMore="true"
app:srlEnableRefresh="true">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_comment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingEnd="@dimen/dp_16"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</LinearLayout>
</layout>

View File

@@ -1,957 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:background="@mipmap/home_bj">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/dp_60"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_48"
android:layout_marginEnd="@dimen/dp_16"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:visibility="gone">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_marginRight="@dimen/dp_11"
android:src="@drawable/image_yq"/>
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_marginRight="@dimen/dp_11"
android:src="@drawable/custom"/>
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_marginRight="@dimen/dp_11"
android:src="@mipmap/setting"/>
</RelativeLayout>
<LinearLayout
android:id="@+id/me_linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/me_linearlayout2"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_76"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_60"
android:paddingStart="@dimen/dp_16"
android:layout_weight="1"
android:gravity="center|left"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.xscm.moduleutil.utils.MeHeadView
android:id="@+id/riv_user_head"
android:layout_width="@dimen/dp_76"
android:layout_height="@dimen/dp_76"
android:layout_centerHorizontal="true"
android:layout_marginLeft="@dimen/dp_5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:riv_oval="true"/>
<com.xscm.moduleutil.widget.ShineTextView
android:id="@+id/tv_nick_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_16"
android:layout_marginTop="@dimen/dp_5"
android:textColor="@color/white"
app:isShine="false"
app:layout_constraintStart_toEndOf="@+id/riv_user_head"
app:layout_constraintTop_toTopOf="@+id/riv_user_head"
android:layout_marginStart="@dimen/dp_14"
tools:text="用户22333333"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#fff"
android:textSize="@dimen/sp_16"
android:layout_marginTop="@dimen/dp_5"
app:layout_constraintStart_toEndOf="@+id/riv_user_head"
app:layout_constraintTop_toTopOf="@+id/riv_user_head"
android:layout_marginStart="@dimen/dp_14"
tools:text="用户22333333"/>
<TextView
android:id="@+id/beautiful_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_FFFFFFE0"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="@+id/tv_nick_name"
app:layout_constraintTop_toBottomOf="@+id/tv_nick_name"
tools:text="22222"/>
<TextView
android:id="@+id/tv_copy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:background="@mipmap/copy"
android:textColor="@color/color_666666"
app:layout_constraintStart_toEndOf="@+id/beautiful_view"
app:layout_constraintTop_toTopOf="@+id/beautiful_view"
android:textSize="12sp"/>
<ImageView
android:id="@+id/im_beautiful"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_11"
android:layout_marginLeft="5dp"
app:layout_constraintStart_toEndOf="@+id/tv_copy"
app:layout_constraintTop_toTopOf="@+id/tv_copy"
android:scaleType="fitCenter"
android:src="@mipmap/beautiful"/>
<LinearLayout
android:id="@+id/ll_image_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="@dimen/dp_4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/beautiful_view"
app:layout_constraintStart_toStartOf="@+id/beautiful_view"
/>
<ImageView
android:id="@+id/tv_home"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_33"
android:src="@mipmap/me_edit"
android:layout_marginEnd="@dimen/dp_16"
android:scaleType="fitCenter"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/me_linearlayout3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/me_linearlayout2">
<LinearLayout
android:id="@+id/ll_follow"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:layout_gravity="center|center_horizontal|center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/tv_follow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="0"
android:fontFamily="@font/semibold"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_22"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_1"
android:text="关注"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<View
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_18"
android:layout_gravity="center_vertical"
android:background="#444541"
/>
<LinearLayout
android:id="@+id/ll_fans"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_fans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:fontFamily="@font/semibold"
android:text="0"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_22"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_1"
android:text="粉丝"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<View
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_18"
android:layout_gravity="center_vertical"
android:background="#444541"
/>
<LinearLayout
android:id="@+id/ll_friends"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:visibility="visible">
<TextView
android:id="@+id/tv_friends"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="0"
android:fontFamily="@font/semibold"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_22"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_1"
android:text="访客"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<View
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_18"
android:layout_gravity="center_vertical"
android:background="@color/white"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/ll_visit"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone">
<TextView
android:id="@+id/tv_visit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="0"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_20"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_1"
android:text="访客"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_noble_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_marginEnd="@dimen/dp_15"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_20">
<ImageView
android:id="@+id/im_noblesse"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/my_noblesse"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更多"
android:gravity="center"
android:drawableRight="@mipmap/arrow_right"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/im_noblesse"
android:layout_marginEnd="@dimen/dp_15"
android:textColor="#EECE72"
android:textSize="@dimen/sp_14"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
app:cardBackgroundColor="#231F2C"
app:cardCornerRadius="@dimen/dp_8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="@dimen/dp_16"
android:paddingBottom="@dimen/dp_12"
>
<LinearLayout
android:id="@+id/ll_recharge"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:background="@color/transparent"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/me_recharge"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="充值"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_my_shopping"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:background="@color/transparent"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/me_show_store"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="商城"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_me_guild"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:background="@color/transparent"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/me_gh"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="公会"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_me_zy"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:visibility="gone"
android:layout_weight="1"
android:gravity="center"
android:background="@color/transparent"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/me_zy"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="挚友"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/im_my_room"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:background="@color/transparent"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/me_home"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="房间"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- 空余的防骗指南-->
<com.stx.xhb.xbanner.XBanner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_64"
app:AutoPlayTime="3000"
android:layout_marginHorizontal="@dimen/dp_16"
app:isAutoPlay="true"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="@dimen/dp_12"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl"
app:pointsVisibility="false"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
app:cardBackgroundColor="#231F2C"
app:cardCornerRadius="@dimen/dp_8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/dp_16"
android:paddingBottom="@dimen/dp_12"
android:paddingEnd="@dimen/dp_16"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的钱包"
android:textColor="#929196"
android:layout_marginTop="@dimen/dp_12"
android:textSize="@dimen/sp_14"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/tv_my_wallet"
android:layout_width="0dp"
android:layout_height="@dimen/dp_60"
android:layout_weight="1"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginEnd="@dimen/dp_8"
android:background="@drawable/bg_me_wallet"
android:orientation="vertical">
<TextView
android:id="@+id/tv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="0.00"
android:fontFamily="@font/semibold"
android:textColor="#222222"
android:textSize="@dimen/sp_20"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/wallet"
android:textColor="#333"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_gift_wall"
android:layout_width="0dp"
android:layout_height="@dimen/dp_60"
android:layout_weight="1"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginStart="@dimen/dp_8"
android:background="@drawable/bg_me_gift_wall"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="礼物墙"
android:fontFamily="@font/semibold"
android:textColor="#222222"
android:textSize="@dimen/sp_20"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
app:cardBackgroundColor="#231F2C"
app:cardCornerRadius="@dimen/dp_8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/dp_16"
android:paddingBottom="@dimen/dp_12"
android:paddingEnd="@dimen/dp_16"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="常用服务"
android:textColor="#929196"
android:layout_marginTop="@dimen/dp_12"
android:textSize="@dimen/sp_14"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/me_my_dan"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/my_dan"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="@string/dan"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/me_dress_up"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:visibility="visible">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/personality"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="@string/dressup"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/tv_my_bb"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/me_my_bag"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="@string/backpack"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/iv_sz"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:visibility="visible">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/me_setting"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="@string/setting_name"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
app:cardBackgroundColor="#231F2C"
app:cardCornerRadius="@dimen/dp_8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/dp_16"
android:paddingBottom="@dimen/dp_12"
android:paddingEnd="@dimen/dp_16">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更多"
android:textColor="#929196"
android:layout_marginTop="@dimen/dp_12"
android:textSize="@dimen/sp_14"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_me_help"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/me_help"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="帮助中心"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/iv_hb"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/me_invitation"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="邀请"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/me_daily"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:visibility="visible">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/me_test"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="@string/daily"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:id="@+id/iv_fk"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:visibility="invisible">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/me_opinion"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="意见反馈"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_marginTop="@dimen/dp_15"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_me_income"
android:layout_width="0dp"
android:layout_height="@dimen/dp_46"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:src="@mipmap/me_income"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_17"
android:layout_marginTop="@dimen/dp_3"
android:text="个税客服"
android:textColor="#CCCDC8"
android:textSize="@dimen/sp_12"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="@dimen/dp_44"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<!-- <ImageView-->
<!-- android:layout_width="@dimen/dp_20"-->
<!-- android:layout_height="@dimen/dp_20"-->
<!-- android:src="@mipmap/me_my_bag"/>-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="@dimen/dp_17"-->
<!-- android:layout_marginTop="@dimen/dp_3"-->
<!-- android:text="@string/backpack"-->
<!-- android:textColor="@color/color_FF333333"-->
<!-- android:textSize="@dimen/sp_12"/>-->
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="@dimen/dp_44"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.core.widget.NestedScrollView>
</layout>

View File

@@ -1,294 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_transparent"
app:elevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraint_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingTop="@dimen/dp_10"
android:paddingRight="16dp"
app:layout_scrollFlags="scroll|enterAlways">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_h_t"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/rm_home"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:src="@mipmap/home_rm"
app:layout_constraintEnd_toStartOf="@+id/my_home"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.5" />
<ImageView
android:id="@+id/im_hr"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_18"
android:layout_marginTop="@dimen/dp_20"
android:scaleType="fitCenter"
android:src="@mipmap/f_h"
app:layout_constraintStart_toStartOf="@+id/rm_home"
app:layout_constraintTop_toTopOf="@+id/rm_home" />
<TextView
android:id="@+id/tv_home_hr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/youshebiaotihei"
android:text="热门房间"
android:textColor="#fff1ecff"
android:textSize="@dimen/sp_17"
app:layout_constraintStart_toEndOf="@+id/im_hr"
app:layout_constraintTop_toTopOf="@+id/im_hr" />
<ImageView
android:id="@+id/im_x"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:src="@mipmap/home_xx"
app:layout_constraintBottom_toBottomOf="@+id/tv_home_hr"
app:layout_constraintStart_toEndOf="@+id/tv_home_hr"
app:layout_constraintTop_toTopOf="@+id/tv_home_hr" />
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner_view_pager"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:bvp_indicator_visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/im_x"
app:layout_constraintStart_toStartOf="@+id/im_hr"
app:layout_constraintTop_toBottomOf="@+id/tv_home_hr" />
<ImageView
android:id="@+id/my_home"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_14"
android:scaleType="fitCenter"
android:src="@mipmap/my_home"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/rm_home"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_my_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_11"
android:layout_marginTop="@dimen/dp_5"
android:fontFamily="@font/youshebiaotihei"
android:text="我的房间"
android:textColor="#fff1ecff"
android:textSize="@dimen/sp_17"
app:layout_constraintStart_toStartOf="@+id/my_home"
app:layout_constraintTop_toTopOf="@+id/my_home" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_1"
android:text="进行一场灵魂深聊"
android:textColor="#80ffffff"
android:textSize="@dimen/sp_11"
app:layout_constraintStart_toStartOf="@+id/tv_my_home"
app:layout_constraintTop_toBottomOf="@+id/tv_my_home" />
<ImageView
android:id="@+id/home_phb"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:scaleType="fitCenter"
android:src="@mipmap/home_phb"
app:layout_constraintEnd_toEndOf="@+id/my_home"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@+id/my_home"
app:layout_constraintTop_toBottomOf="@+id/my_home" />
<TextView
android:id="@+id/tv_home_phb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_11"
android:layout_marginTop="@dimen/dp_5"
android:fontFamily="@font/youshebiaotihei"
android:text="排行榜"
android:textColor="#fff1ecff"
android:textSize="@dimen/sp_17"
app:layout_constraintStart_toStartOf="@+id/home_phb"
app:layout_constraintTop_toTopOf="@+id/home_phb" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_1"
android:text="荣耀之巅 彰显实力"
android:textColor="#80ffffff"
android:textSize="@dimen/sp_11"
app:layout_constraintStart_toStartOf="@+id/tv_home_phb"
app:layout_constraintTop_toBottomOf="@+id/tv_home_phb" />
<ImageView
android:id="@+id/home_gg"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:scaleType="fitCenter"
android:src="@mipmap/home_gg"
app:layout_constraintEnd_toEndOf="@+id/home_phb"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@+id/home_phb"
app:layout_constraintTop_toBottomOf="@+id/home_phb" />
<TextView
android:id="@+id/tv_home_gg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_11"
android:layout_marginTop="@dimen/dp_5"
android:fontFamily="@font/youshebiaotihei"
android:text="官方公告"
android:textColor="#fff1ecff"
android:textSize="@dimen/sp_17"
app:layout_constraintStart_toStartOf="@+id/home_gg"
app:layout_constraintTop_toTopOf="@+id/home_gg" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_1"
android:text="政策变动一键留痕"
android:textColor="#80ffffff"
android:textSize="@dimen/sp_11"
app:layout_constraintStart_toStartOf="@+id/tv_home_gg"
app:layout_constraintTop_toBottomOf="@+id/tv_home_gg" />
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_31"
android:layout_marginTop="@dimen/dp_12"
android:background="@mipmap/xiaox_b"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@+id/cl_h_t">
<ImageView
android:id="@+id/tv_hot"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_alignParentStart="true"
android:layout_centerInParent="true"
android:layout_marginStart="@dimen/dp_15"
android:src="@mipmap/pp"
android:visibility="invisible" />
<com.sunfusheng.marqueeview.MarqueeView
android:id="@+id/marqueeView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/dp_8"
android:layout_toStartOf="@+id/tv_wg"
android:layout_toEndOf="@+id/tv_hot"
app:mvAnimDuration="1000"
app:mvInterval="3000"
app:mvSingleLine="true"
app:mvTextColor="#B49FFF"
app:mvTextSize="@dimen/sp_14" />
<ImageView
android:id="@+id/tv_wg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerInParent="true"
android:layout_marginStart="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_25"
android:scaleType="fitCenter"
android:src="@mipmap/wg" />
</RelativeLayout>
<com.stx.xhb.xbanner.XBanner
android:id="@+id/banner"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_12"
app:AutoPlayTime="3000"
app:isAutoPlay="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="340:96"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl"
app:pointsVisibility="false" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/sliding_tab_layout"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_34"
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginRight="@dimen/dp_16"
app:tabIndicator="@drawable/tab_indicator_bg"
app:tabIndicatorFullWidth="true"
app:tabIndicatorHeight="@dimen/dp_15"
app:tabIndicatorGravity="center"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/white"
app:tabIndicatorColor="@android:color/transparent"
app:tabTextAppearance="@style/CustomTabTextAppearance"
app:tabTextColor="#F1ECFF" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/dp_14"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:background="@color/color_transparent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_85"
xmlns:tools="http://schemas.android.com/tools"
>
<ImageView
android:id="@+id/iv_emotion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
tools:src="@mipmap/ic_launcher"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="@dimen/dp_10"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_emotion_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:ellipsize="end"
android:maxLines="1"
android:gravity="center"
android:textColor="#BBB9C6"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_emotion" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"
android:src="@mipmap/noble_is_lock"
android:scaleType="fitCenter"
android:id="@+id/iv_select"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,166 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
android:animateLayoutChanges="true"
android:clipChildren="false"
android:clipToPadding="false"
android:keepScreenOn="true">
<TextView
android:id="@+id/tv_main_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_15"
android:text="私密小屋"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints" />
<ImageView
android:id="@+id/iv_exit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_16"
android:padding="@dimen/dp_5"
android:scaleType="center"
android:src="@mipmap/exit_cad"
app:layout_constraintBottom_toBottomOf="@+id/tv_main_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_main_title" />
<ImageView
android:id="@+id/im"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/xiaohei_bj"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_exit" />
<TextView
android:id="@+id/dating_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/room_head_information_bg"
android:drawablePadding="3dp"
android:gravity="center"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="3dp"
android:paddingRight="@dimen/dp_10"
android:paddingBottom="3dp"
android:text="00:00:00"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cl_2" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/im"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/im">
<com.xscm.moduleutil.widget.RoomMakeWheatView
android:id="@+id/room_make_wheat1"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_70"
android:layout_marginStart="@dimen/dp_35"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:room_make_wheat_number="000" />
<RelativeLayout
android:id="@+id/fl_heart_value2"
android:layout_width="@dimen/dp_180"
android:layout_height="@dimen/dp_85"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_heart_value2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/dating_heart_line2" />
<TextView
android:id="@+id/tv_heart_value2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:shadowColor="#40b40066"
android:shadowDx="0"
android:shadowDy="1"
android:shadowRadius="3.0"
android:textColor="@color/white"
android:textSize="@dimen/sp_18"
tools:text="1000000" />
</RelativeLayout>
<com.xscm.moduleutil.widget.RoomMakeWheatView
android:id="@+id/room_make_wheat2"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_70"
android:layout_marginEnd="@dimen/dp_35"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:room_make_wheat_number="000" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="@dimen/dp_36"
android:layout_marginTop="@dimen/dp_80"
android:layout_marginEnd="@dimen/dp_36"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cl_2">
<ImageView
android:id="@+id/im_1"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@mipmap/close_m" />
<ImageView
android:id="@+id/im_2"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@mipmap/gifit" />
<ImageView
android:id="@+id/im_3"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@mipmap/gongxiang" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View File

@@ -17,7 +17,7 @@ android {
}
defaultConfig {
applicationId "com.qxcm.qxlive"
minSdk 24
minSdk 26
targetSdk 33
versionCode Integer.parseInt(project.findProperty("APP_VERSION_CODE"))
versionName project.findProperty("APP_VERSION_NAME")
@@ -54,35 +54,30 @@ android {
dimension "environment"
// 正式版包名使用基础包名com.example.myapp
applicationIdSuffix ""
// // 测试版包名:基础包名 + .betacom.example.myapp.beta
// applicationIdSuffix ".beta.b"
// 【正式版应用名称】通过resValue动态生成string资源
resValue "string", "app_name", "羽声语音"
// resValue "string", "app_name", "羽声语音APP"
// 【正式版图标】替换manifest中的占位符使用main目录下的正式图标
manifestPlaceholders = [
appIcon: "@mipmap/ic_launcher", // 需在main/res/mipmap放置该图标
fileProviderAuthority: "com.qxcm.qxlive.provider"
appIcon: "@mipmap/ic_launcher" // 需在main/res/mipmap放置该图标
]
}
// // 测试版配置
beta {
dimension "environment"
// // 测试版包名:基础包名 + .betacom.example.myapp.beta
// 测试版包名:基础包名 + .betacom.example.myapp.beta
applicationIdSuffix ".beta"
// // 测试版版本名1.0-beta
// 测试版版本名1.0-beta
versionNameSuffix "-beta"
//
// // 【测试版应用名称】动态生成带标识的名称
// 【测试版应用名称】动态生成带标识的名称
resValue "string", "app_name", "羽声-测试版"
//
// // 【测试版图标】替换为测试专用图标
// 【测试版图标】替换为测试专用图标
manifestPlaceholders = [
appIcon: "@mipmap/ic_launcher_app_bat", // 需在main/res/mipmap放置该图标
fileProviderAuthority: "com.qxcm.qxlive.beta.provider"
appIcon: "@mipmap/ic_launcher_app_bat" // 需在main/res/mipmap放置该图标
]
}
}
@@ -118,10 +113,7 @@ android {
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def versionName = variant.versionName
def versionCode = variant.versionCode
// 获取当前时间戳格式yyyyMMddHHmmss
def buildTimes = new Date().format("yyyy-MM-dd_HH_mm_ss")
// def fileName = "羽声_${versionName}_${buildTimes}.apk"
def fileName = "羽声_${versionName}_${buildTimes}.apk"
def fileName = "羽声_${versionName}_${versionCode}.apk"
output.outputFileName = fileName
}
}
@@ -181,7 +173,6 @@ android {
}
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
// implementation fileTree(dir: '../LocalAar/aar_libs', include: ['*.jar', '*.aar'] dir: 'libs')
@@ -207,12 +198,12 @@ dependencies {
implementation(libs.arouter.api.v150)
//annotationProcessor
annotationProcessor libs.arouter.compiler
implementation project(':MainModule')
// implementation project(':modulevocal') // 必须
// annotationProcessor project(':modulevocal') // 关键!
implementation project(':modulevocal') // 必须
annotationProcessor project(':modulevocal') // 关键!
// api project(":moduleUtil")
// api project(":moduleLogin")
api project(":moduleUtil")
api project(":moduleLogin")
implementation project(':modulemain')
//aar的名称例如WbCloudFaceLiveSdk-v6.0.0-1234567.aar填入'WbCloudFaceLiveSdk-v6.0.0-1234567'
// implementation(name: 'WbCloudFaceLiveSdk-face-v6.6.2-8e4718fc', ext: 'aar')

View File

@@ -175,6 +175,7 @@
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="false"
android:launchMode="singleTask"
android:screenOrientation="behind"
android:theme="@style/authsdk_activity_dialog" />
<!-- <activity-->
@@ -184,11 +185,18 @@
<!-- android:launchMode="singleTop"-->
<!-- android:screenOrientation="behind" />-->
<activity
android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="behind"
android:theme="@style/authsdk_activity_dialog" />
<activity
android:name=".wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="com.qxcm.qxlive"
android:launchMode="singleTask">
</activity>
<!-- 微信支付回调Activity必须放在包名.wxapi路径下 -->
@@ -196,22 +204,14 @@
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop" />
<activity
android:name="com.example.modulevocal.activity.RealNameActivity"
android:exported="false" />
<activity
android:name=".PasswordLoginActivity"
android:exported="true"
/>
<!--<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>-->
</application>
<!-- <queries>-->
<!-- &lt;!&ndash; 支付宝 scheme &ndash;&gt;-->

View File

@@ -2,14 +2,14 @@ package com.qxcm.qxlive;
import com.alibaba.android.arouter.launcher.ARouter;
import com.hjq.toast.ToastUtils;
import com.xscm.modulemain.Application;
import com.xscm.moduleutil.base.CommonAppContext;
/**
* Created by cxf on 2017/8/3.
*/
public class AppContext extends Application {
public class AppContext extends CommonAppContext {
private boolean mBeautyInited;

View File

@@ -1,3 +0,0 @@
package com.qxcm.qxlive;
public class FileProvider extends androidx.core.content.FileProvider {}

View File

@@ -1,7 +1,6 @@
package com.qxcm.qxlive;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
@@ -12,15 +11,13 @@ import androidx.annotation.Nullable;
import com.alibaba.android.arouter.launcher.ARouter;
import com.qxcm.qxlive.databinding.ActivityLaunchPageBinding;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulemain.activity.WebViewActivity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
import com.xscm.modulelogin.activity.ImproveInfoActivity;
import com.xscm.moduleutil.activity.BaseAppCompatActivity;
import com.xscm.moduleutil.activity.WebViewActivity;
import com.xscm.moduleutil.base.AppStateListener;
import com.xscm.moduleutil.base.AppStateManager;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.modulemain.dialog.PolicyDialog;
import com.xscm.moduleutil.base.WebUrlConstants;
import com.xscm.moduleutil.dialog.PolicyDialog;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.SpUtil;
/**
@@ -56,7 +53,7 @@ import com.xscm.moduleutil.utils.SpUtil;
* 别人笑我忒疯癫,我笑自己命太贱;
* 不见满街漂亮妹,哪个归得程序员?
*/
public class LaunchPageActivity extends BaseMvpActivity<IPresenter,ActivityLaunchPageBinding> implements IView<Activity> {
public class LaunchPageActivity extends BaseAppCompatActivity<ActivityLaunchPageBinding> {
private Handler handler;
private PolicyDialog policyDialog;
private AppStateListener appStateListener;
@@ -73,8 +70,11 @@ public class LaunchPageActivity extends BaseMvpActivity<IPresenter,ActivityLaunc
if (!isTaskRoot()) {
if (SpUtil.getUnderagePassword() != null && !SpUtil.getUnderagePassword().isEmpty()) {
// ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken())
// .withString("type", "1").navigation();//type==1青少年模式
Intent intent = new Intent(this, WebViewActivity.class);
intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_ADOLESCENT_URL(),SpUtil.getToken()));
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken());
intent.putExtra("title", "1");
startActivity(intent);
} else {
@@ -156,11 +156,6 @@ public class LaunchPageActivity extends BaseMvpActivity<IPresenter,ActivityLaunc
super.onDestroy();
}
@Override
protected IPresenter bindPresenter() {
return null;
}
@Override
protected void initView() {

View File

@@ -4,11 +4,10 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.modulemain.activity.login.activity.ImproveInfoActivity;
import com.xscm.modulemain.activity.login.activity.SwitchAccountsActivity;
import com.xscm.modulemain.activity.main.activity.MainActivity;
import com.xscm.modulelogin.activity.ImproveInfoActivity;
import com.xscm.modulelogin.activity.SwitchAccountsActivity;
import com.xscm.modulemain.activity.MainActivity;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.http.BaseObserver;
@@ -73,24 +72,24 @@ public class LaunchPresenter extends BasePresenter<com.qxcm.qxlive.LaunchContact
}
if (userBean.get(0).getSex() == 0) {
try {
Intent intent = new Intent(ActivityUtils.getTopActivity(), ImproveInfoActivity.class);
Intent intent = new Intent(com.blankj.utilcode.util.ActivityUtils.getTopActivity(), ImproveInfoActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("userBean", userBean.get(0));
intent.putExtras(bundle);
ActivityUtils.startActivity(intent);
com.blankj.utilcode.util.ActivityUtils.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
} else {
ActivityUtils.startActivity(MainActivity.class);
com.blankj.utilcode.util.ActivityUtils.startActivity(MainActivity.class);
}
}else {
Intent intent=new Intent(ActivityUtils.getTopActivity(), SwitchAccountsActivity.class);
Intent intent=new Intent(com.blankj.utilcode.util.ActivityUtils.getTopActivity(), SwitchAccountsActivity.class);
Bundle bundle=new Bundle();
bundle.putSerializable("userBean", userBean.get(0));
intent.putExtras(bundle);
ActivityUtils.startActivity(intent);
com.blankj.utilcode.util.ActivityUtils.startActivity(intent);
}
EventBus.getDefault().post(userBean);

View File

@@ -28,21 +28,22 @@ import com.mobile.auth.gatewayauth.PreLoginResultListener;
import com.mobile.auth.gatewayauth.TokenResultListener;
import com.mobile.auth.gatewayauth.model.TokenRet;
import com.qxcm.qxlive.databinding.ActivityPasswordLoginBinding;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulemain.activity.login.activity.ImproveInfoActivity;
import com.xscm.modulemain.activity.login.present.LoginContacter;
import com.xscm.modulemain.activity.login.present.LoginPresenter;
import com.xscm.modulemain.activity.main.activity.MainActivity;
import com.xscm.modulelogin.activity.ImproveInfoActivity;
import com.xscm.modulelogin.even.LoginFinishEvent;
import com.xscm.modulelogin.present.LoginContacter;
import com.xscm.modulelogin.present.LoginPresenter;
import com.xscm.modulemain.activity.MainActivity;
import com.xscm.moduleutil.activity.BaseMvpActivity;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.utils.BarUtils;
import com.xscm.moduleutil.utils.PreferencesUtils;
import com.xscm.moduleutil.utils.logger.Logger;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -68,7 +69,6 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
@Override
protected int getLayoutId() {
LogUtils.e("启动了===========================PasswordLoginActivity");
return R.layout.activity_password_login;
}
@Override
@@ -88,6 +88,8 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
// 新增版本检查逻辑
checkAppVersion();
super.onCreate(savedInstanceState);
// EventBus.getDefault().register(this);
// AppLogUtil.reportAppLog(AppLogEvent.A0101);
}
private void checkAppVersion() {
// 获取当前版本号
@@ -123,6 +125,7 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
if (phoneNumberAuthHelper!=null) {
phoneNumberAuthHelper.hideLoginLoading();
//获取成功 dimiss就去登录、登录成功
@@ -132,7 +135,7 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void finishEvent() {
public void finishEvent(LoginFinishEvent event) {
finish();
}
@@ -431,12 +434,12 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
@Override
public void showLoadings() {
// showLoading();
showLoading();
}
@Override
public void disLoadings() {
// disLoading();
disLoading();
}
private void setUpLoginBtn() {
@@ -525,7 +528,7 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
ToastUtils.show("请输入手机号");
return;
}
sendCodeSuccess(phone);
MvpPre.sendCode(phone, 1);
}else if (id == R.id.iv_eye) {
@@ -547,7 +550,7 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
api.registerApp(CommonAppContext.getInstance().getCurrentEnvironment().getWxAppId());
if (!api.isWXAppInstalled()){
//todo 提醒未安装微信
ToastUtils.show("请安装微信客户端");
com.blankj.utilcode.util.ToastUtils.showShort("请安装微信客户端");
return;
}
//开始发起登陆请求
@@ -572,8 +575,8 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
}
}
public void sendCodeSuccess(String phoneNumber) {
ToastUtils.show("短信验证码发送成功请注意查收");
public void sendCodeSuccess() {
com.blankj.utilcode.util.ToastUtils.showShort("短信验证码发送成功请注意查收");
mBinding.tvSendCode.setEnabled(false);
mBinding.tvSendCode.setAlpha(0.5f);
releaseTimer();
@@ -601,6 +604,7 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
@Override
public void sendCodeSuccess1(String s) {
LogUtils.e(s);
sendCodeSuccess();
}
@Override
@@ -627,7 +631,7 @@ public class PasswordLoginActivity extends BaseMvpActivity<LoginPresenter, Activ
LogUtils.e("@@@",s);
CommonAppContext.getInstance();
if (!CommonAppContext.isAlipayInstalled(this)){
ToastUtils.show("请安装支付宝客户端");
com.blankj.utilcode.util.ToastUtils.showShort("请安装支付宝客户端");
return;
}
String authInfo = s;

View File

@@ -339,7 +339,6 @@
android:layout_width="@dimen/dp_15"
android:layout_height="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_5"
android:checked="true"
android:background="@drawable/selector_login_agreement"
android:button="@null" />

View File

@@ -28,8 +28,8 @@ isBuildModule=false
#org.gradle.deamon=false
android.injected.testOnly=false
APP_VERSION_NAME=1.0.6.7
APP_VERSION_CODE=56
APP_VERSION_NAME=1.0.6.1
APP_VERSION_CODE=51
org.gradle.jvm.toolchain.useLegacyAdapters=false
#org.gradle.java.home=C\:\\Users\\qx\\.jdks\\ms-17.0.15

View File

@@ -29,7 +29,7 @@ arouterAnnotation = "1.0.6"
arouterCompiler = "1.5.2"
comSquareupRetrofit2Retrofit3 = "2.9.0"
fastjson = "1.2.60"
githubBaserecyclerviewadapterhelper = "2.9.50"
githubBaserecyclerviewadapterhelper = "2.9.30"
gsonVersion = "2.10.1"
eventbusVersion = "3.3.1"
logger = "2.2.0"
@@ -54,11 +54,9 @@ lifecycleLivedataKtx = "2.6.1"
lifecycleViewmodelKtx = "2.6.1"
wechatSdkAndroid = "6.8.30"
xbanner = "1.7.0"
appcompatVersion = "1.3.1"
legacySupportV4 = "1.0.0"
fragmentKtx = "1.5.6"
interpolator = "1.0.0"
material3Android = "1.4.0"
uiToolingPreviewAndroid = "1.9.4"
tilesToolingPreview = "1.5.0"
@@ -77,6 +75,7 @@ databinding-runtime-v702 = { module = "androidx.databinding:databinding-runtime"
dpa-oss-android-sdk = { module = "com.aliyun.dpa:oss-android-sdk", version.ref = "ossAndroidSdkVersion" }
easy-protector-release = { module = "com.lahm.library:easy-protector-release", version.ref = "easyProtectorRelease" }
easypermissions = { module = "pub.devrel:easypermissions", version.ref = "easypermissions" }
#egame-animplayer = { module = "com.egame.vap:animplayer", version.ref = "egameAnimplayer" }
github-photoview = { module = "com.github.chrisbanes:PhotoView", version.ref = "githubPhotoview" }
github-shadowlayout = { module = "com.github.lihangleo2:ShadowLayout", version.ref = "githubShadowlayout" }
gradle = { module = "com.android.tools.build:gradle", version.ref = "gradle" }
@@ -90,6 +89,7 @@ marqueeview = { module = "com.sunfusheng:marqueeview", version.ref = "marqueevie
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
#arouter-api = { module = "com.alibaba:arouter-api", version.ref = "arouterApi" }
arouter-compiler = { module = "com.alibaba:arouter-compiler", version.ref = "arouterCompiler" }
arouter-annotation = { module = "com.alibaba:arouter-annotation", version.ref = "arouterAnnotation" }
com-scwang-smartrefresh-smartrefreshheader = { module = "com.scwang.smartrefresh:SmartRefreshHeader", version.ref = "scwangSmartrefreshheader" }
@@ -119,7 +119,6 @@ lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-view
wechat-sdk-android = { module = "com.tencent.mm.opensdk:wechat-sdk-android", version.ref = "wechatSdkAndroid" }
xbanner = { module = "com.github.xiaohaibin:XBanner", version.ref = "xbanner" }
zcw-togglebutton-library = { module = "com.zcw:togglebutton-library", version.ref = "togglebuttonLibraryVersion" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompatVersion" }
androidx-legacy-support-v4 = { group = "androidx.legacy", name = "legacy-support-v4", version.ref = "legacySupportV4" }
androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragmentKtx" }
androidx-interpolator = { group = "androidx.interpolator", name = "interpolator", version.ref = "interpolator" }
@@ -133,6 +132,8 @@ androidx-constraintlayout = { group = "androidx.constraintlayout", name = "const
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlinVersion" }
#kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlinVersion" }
#alibaba-arouter = { id = "com.alibaba.arouter", version.ref = "arouter" }
greendao-plugin = { id = "org.greenrobot.greendao", version.ref = "greendaoGradlePlugin" }
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlinVersion" }
kotlin-android-extensions = { id = "org.jetbrains.kotlin.android.extensions", version.ref = "kotlinVersion" }

1
locktableview/.gitignore vendored Normal file
View File

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

View File

@@ -7,8 +7,8 @@ android {
defaultConfig {
minSdk 24
targetSdk 35
versionCode 1
versionName "1.0.0"
versionCode 12
versionName "1.1.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@@ -27,5 +27,5 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.android.support:design:25.0.0'
implementation project(':BaseModule')
implementation project(':moduleUtil')
}

74
module.build.gradle Normal file
View File

@@ -0,0 +1,74 @@
if (isBuildModule.toBoolean()) {
//作为独立App应用运行
apply plugin: 'com.android.application'
} else {
//作为组件运行
apply plugin: 'com.android.library'
}
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 35
defaultConfig {
minSdkVersion 24
targetSdkVersion 28
versionCode 1
versionName 1.0
consumerProguardFiles 'consumer-rules.pro'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// javaCompileOptions {
// annotationProcessorOptions {
// arguments = [AROUTER_MODULE_NAME: project.getName()]
// }
// }
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
//jni库统一放在libs目录下
// jniLibs.srcDir = ['libs']
if (isBuildModule.toBoolean()) {
//单独运行
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
//合并到宿主中
manifest.srcFile 'src/main/AndroidManifest.xml'
resources {
//正式版本时.剔除debug文件夹下的所有调式文件
exclude 'src/debug/*'
}
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
}
dependencies {
implementation deps.arouter_api
kapt deps.arouter_compiler
// kapt deps.arouter_annotation
}

51
moduleLogin/build.gradle Normal file
View File

@@ -0,0 +1,51 @@
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {
namespace 'com.xscm.modulelogin'
compileSdk 35
defaultConfig {
minSdk 24
targetSdk 35
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
dataBinding {
enabled = true
}
kotlinOptions {
jvmTarget = '11'
}
}
dependencies {
implementation libs.appcompat
implementation libs.material
implementation libs.activity
implementation libs.constraintlayout
implementation project(':modulemain')
implementation project(':modulevocal')
testImplementation libs.junit
androidTestImplementation libs.ext.junit
androidTestImplementation libs.espresso.core
implementation project(":moduleUtil")
}
apply plugin: 'com.alibaba.arouter' //

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true">
<activity
android:name=".activity.SwitchAccountsActivity"
android:exported="true"
/>
<activity
android:name=".activity.ImproveInfoActivity"
android:exported="true"
/>
<activity
android:name=".activity.ForgetPasswordActivity"
android:exported="true"
/>
<activity
android:name=".activity.LoginActivity"
android:screenOrientation="portrait" />
</application>
</manifest>

View File

@@ -1,4 +1,4 @@
package com.xscm.modulemain.activity.login.activity;
package com.xscm.modulelogin.activity;
import android.os.CountDownTimer;
import android.text.TextUtils;
@@ -6,11 +6,12 @@ import android.view.View;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.login.present.LoginContacter;
import com.xscm.modulemain.activity.login.present.LoginPresenter;
import com.xscm.modulemain.databinding.ActivityForgetPasswordBinding;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulelogin.R;
import com.xscm.modulelogin.databinding.ActivityForgetPasswordBinding;
import com.xscm.modulelogin.databinding.ActivityLoginBinding;
import com.xscm.modulelogin.present.LoginContacter;
import com.xscm.modulelogin.present.LoginPresenter;
import com.xscm.moduleutil.activity.BaseMvpActivity;
import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.UserBean;
/**
@@ -38,7 +39,7 @@ public class ForgetPasswordActivity extends BaseMvpActivity<LoginPresenter, Acti
if (v.getId() == R.id.tv_send_code) {
String phone = mBinding.edPhone.getText().toString().trim();
if (TextUtils.isEmpty(phone)) {
ToastUtils.showShort("请输入手机号");
com.blankj.utilcode.util.ToastUtils.showShort("请输入手机号");
return;
}
sendCodeSuccess(phone);
@@ -50,23 +51,23 @@ public class ForgetPasswordActivity extends BaseMvpActivity<LoginPresenter, Acti
String password = mBinding.editTextNewPassword.getText().toString().trim();
String confirmPassword = mBinding.editTextConfirmPassword.getText().toString().trim();
if (TextUtils.isEmpty(phone)){
ToastUtils.showShort("请输入手机号");
com.blankj.utilcode.util.ToastUtils.showShort("请输入手机号");
return;
}
if (TextUtils.isEmpty(code)){
ToastUtils.showShort("请输入验证码");
com.blankj.utilcode.util.ToastUtils.showShort("请输入验证码");
return;
}
if (TextUtils.isEmpty(password)){
ToastUtils.showShort("请输入密码");
com.blankj.utilcode.util.ToastUtils.showShort("请输入密码");
return;
}
if (TextUtils.isEmpty(confirmPassword)){
ToastUtils.showShort("两次密码不一致");
com.blankj.utilcode.util.ToastUtils.showShort("两次密码不一致");
return;
}
if (!password.equals(confirmPassword)){
ToastUtils.showShort("两次密码不一致");
com.blankj.utilcode.util.ToastUtils.showShort("两次密码不一致");
return;
}
MvpPre.forgotPassword(password,phone,code);
@@ -80,7 +81,7 @@ public class ForgetPasswordActivity extends BaseMvpActivity<LoginPresenter, Acti
}
}
public void sendCodeSuccess(String phoneNumber) {
ToastUtils.showShort("短信验证码发送成功请注意查收");
com.blankj.utilcode.util.ToastUtils.showShort("短信验证码发送成功请注意查收");
mBinding.tvSendCode.setEnabled(false);
mBinding.tvSendCode.setAlpha(0.5f);
releaseTimer();

View File

@@ -1,4 +1,4 @@
package com.xscm.modulemain.activity.login.activity;
package com.xscm.modulelogin.activity;
import android.content.Intent;
import android.os.Bundle;
@@ -11,21 +11,17 @@ import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.style.PictureSelectorStyle;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.login.contacts.ImproveInfoContacts;
import com.xscm.modulemain.activity.login.contacts.ImproveInfoPresenter;
import com.xscm.modulemain.activity.main.activity.MainActivity;
import com.xscm.modulemain.databinding.ActivityImproveInfoBinding;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulelogin.R;
import com.xscm.modulelogin.databinding.ActivityImproveInfoBinding;
import com.xscm.modulelogin.present.ImproveInfoContacts;
import com.xscm.modulelogin.present.ImproveInfoPresenter;
import com.xscm.modulemain.activity.MainActivity;
import com.xscm.moduleutil.activity.BaseMvpActivity;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.utils.DateSelectDialog;
import com.xscm.moduleutil.utils.GlideEngine;
import com.xscm.moduleutil.utils.ImageLoader;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.PermissionDescriptionHelper;
import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.utils.*;
import com.xscm.moduleutil.widget.Constants;
import org.greenrobot.eventbus.EventBus;
import java.io.File;
@@ -234,7 +230,7 @@ public class ImproveInfoActivity extends BaseMvpActivity<ImproveInfoPresenter, A
List<LocalMedia> localMedia1 = PictureSelector.obtainSelectorList(data);
if (localMedia1 != null && localMedia1.size() != 0) {
LocalMedia imgMedia = localMedia1.get(0);
MvpPre.uploadFile(new File(imgMedia.getRealPath()), 0);
MvpPre.uploadFile(new File(imgMedia.getRealPath()), 3);
}
break;
}

View File

@@ -1,4 +1,4 @@
package com.xscm.modulemain.activity.login.activity;
package com.xscm.modulelogin.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
@@ -15,20 +15,21 @@ import androidx.annotation.Nullable;
import com.alipay.sdk.app.AuthTask;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.login.present.LoginContacter;
import com.xscm.modulemain.activity.login.present.LoginPresenter;
import com.xscm.modulemain.databinding.ActivityLoginBinding;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.modulelogin.R;
import com.xscm.modulelogin.databinding.ActivityLoginBinding;
import com.xscm.modulelogin.even.LoginFinishEvent;
import com.xscm.modulelogin.present.LoginContacter;
import com.xscm.modulelogin.present.LoginPresenter;
import com.xscm.moduleutil.activity.BaseMvpActivity;
import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.utils.BarUtils;
import com.xscm.moduleutil.utils.PreferencesUtils;
import com.xscm.moduleutil.base.CommonAppContext;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -61,15 +62,17 @@ public class LoginActivity extends BaseMvpActivity<LoginPresenter, ActivityLogin
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void finishEvent() {
public void finishEvent(LoginFinishEvent event) {
finish();
}
@@ -162,7 +165,7 @@ public class LoginActivity extends BaseMvpActivity<LoginPresenter, ActivityLogin
@Override
public void showLoadings() {
// showLoading();
showLoading();
}
@Override
@@ -172,7 +175,7 @@ public class LoginActivity extends BaseMvpActivity<LoginPresenter, ActivityLogin
@Override
public void disLoadings() {
// disLoading();
disLoading();
}

View File

@@ -1,4 +1,4 @@
package com.xscm.modulemain.activity.login.activity;
package com.xscm.modulelogin.activity;
import android.os.Build;
import android.os.Bundle;
@@ -6,12 +6,12 @@ import android.util.Log;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.login.present.LoginContacter;
import com.xscm.modulemain.activity.login.present.LoginPresenter;
import com.xscm.modulemain.adapter.SwitchAccountsAdapter;
import com.xscm.modulemain.databinding.ActivitySwitchAccountsBinding;
import com.xscm.modulemain.BaseMvpActivity;
import com.xscm.modulelogin.R;
import com.xscm.modulelogin.adapter.SwitchAccountsAdapter;
import com.xscm.modulelogin.databinding.ActivitySwitchAccountsBinding;
import com.xscm.modulelogin.present.LoginContacter;
import com.xscm.modulelogin.present.LoginPresenter;
import com.xscm.moduleutil.activity.BaseMvpActivity;
import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.UserBean;

View File

@@ -1,10 +1,11 @@
package com.xscm.modulemain.adapter;
package com.xscm.modulelogin.adapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.xscm.modulemain.R;
import com.xscm.modulelogin.R;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.utils.ImageUtils;
@@ -43,5 +44,7 @@ public class SwitchAccountsAdapter extends BaseQuickAdapter<UserBean, BaseViewHo
onItemClickListener.onItemClick(item);
}
});
}
}

View File

@@ -1,4 +1,4 @@
package com.xscm.modulemain.bean;
package com.xscm.modulelogin.bean;
/**
* 项目名称 qipao-android

View File

@@ -0,0 +1,4 @@
package com.xscm.modulelogin.even;
public class LoginFinishEvent {
}

View File

@@ -1,7 +1,8 @@
package com.xscm.modulemain.activity.login.contacts;
package com.xscm.modulelogin.present;
import android.app.Activity;
import com.xscm.moduleutil.activity.IPresenter;
import com.xscm.moduleutil.activity.IView;
import com.xscm.moduleutil.bean.UserBean;

View File

@@ -1,7 +1,8 @@
package com.xscm.modulemain.activity.login.contacts;
package com.xscm.modulelogin.present;
import android.content.Context;
import com.hjq.toast.ToastUtils;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.UserBean;
@@ -24,10 +25,7 @@ public class ImproveInfoPresenter extends BasePresenter<ImproveInfoContacts.View
@Override
public void uploadFile(File file, int type) {
if (MvpRef==null){
MvpRef=new WeakReference<>(mView);
}
// MvpRef.get().showLoadings("上传中...");
MvpRef.get().showLoadings("上传中...");
String url = OSSOperUtils.getPath(file, type);
CosUploadManager.getInstance(CommonAppContext.getInstance()).upParameters(url,file.getPath(), new CosUploadManager.UploadCallback() {
@Override
@@ -103,9 +101,6 @@ public class ImproveInfoPresenter extends BasePresenter<ImproveInfoContacts.View
@Override
public void onNext(String s) {
if (MvpRef==null){
MvpRef=new WeakReference<>(mView);
}
MvpRef.get().updateNicknameSuccess(s);
}
@@ -127,9 +122,6 @@ public class ImproveInfoPresenter extends BasePresenter<ImproveInfoContacts.View
@Override
public void onNext(String userPictrue) {
if (MvpRef==null){
MvpRef=new WeakReference<>(mView);
}
MvpRef.get().updateSexTrue(userPictrue);
}
@@ -150,9 +142,6 @@ public class ImproveInfoPresenter extends BasePresenter<ImproveInfoContacts.View
@Override
public void onNext(UserBean userBean) {
if (MvpRef==null){
MvpRef=new WeakReference<>(mView);
}
MvpRef.get().updateSuccess(userBean);
}
});

View File

@@ -1,4 +1,4 @@
package com.xscm.modulemain.activity.login.present;
package com.xscm.modulelogin.present;
import android.app.Activity;

View File

@@ -1,21 +1,22 @@
package com.xscm.modulemain.activity.login.present;
package com.xscm.modulelogin.present;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.blankj.utilcode.util.ActivityUtils;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.modulemain.activity.login.activity.ImproveInfoActivity;
import com.xscm.modulemain.activity.login.activity.SwitchAccountsActivity;
import com.xscm.modulemain.activity.main.activity.MainActivity;
import com.xscm.modulemain.activity.WebViewActivity;
import com.xscm.modulelogin.activity.ImproveInfoActivity;
import com.xscm.modulelogin.activity.SwitchAccountsActivity;
import com.xscm.modulemain.activity.MainActivity;
import com.xscm.moduleutil.activity.WebViewActivity;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.presenter.BasePresenter;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.SpUtil;
import org.greenrobot.eventbus.EventBus;
@@ -112,6 +113,7 @@ public class LoginPresenter extends BasePresenter<LoginContacter.View> implement
}
@Override
public void switchAccounts(String loginId) {
api.switchAccounts(loginId, new BaseObserver<List<UserBean>>() {
@@ -143,7 +145,6 @@ public class LoginPresenter extends BasePresenter<LoginContacter.View> implement
}
});
}
//一键登陆
@Override
public void oauthLoginLogin(String auth_code) {
@@ -203,32 +204,29 @@ public class LoginPresenter extends BasePresenter<LoginContacter.View> implement
}
if (userBean.get(0).getSex() == 0) {
try {
Intent intent = new Intent(ActivityUtils.getTopActivity(), ImproveInfoActivity.class);
Intent intent = new Intent(com.blankj.utilcode.util.ActivityUtils.getTopActivity(), ImproveInfoActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("userBean", userBean.get(0));
intent.putExtras(bundle);
ActivityUtils.startActivity(intent);
if (ActivityUtils.getTopActivity() != null)
ActivityUtils.getTopActivity().finish();
com.blankj.utilcode.util.ActivityUtils.startActivity(intent);
com.blankj.utilcode.util.ActivityUtils.getTopActivity().finish();
} catch (Exception e) {
e.printStackTrace();
}
} else {
EventBus.getDefault().post(userBean.get(0));
ActivityUtils.startActivity(MainActivity.class);
if (ActivityUtils.getTopActivity() != null)
ActivityUtils.getTopActivity().finish();
com.blankj.utilcode.util.ActivityUtils.startActivity(MainActivity.class);
com.blankj.utilcode.util.ActivityUtils.getTopActivity().finish();
}
} else {
Intent intent = new Intent(ActivityUtils.getTopActivity(), SwitchAccountsActivity.class);
Intent intent = new Intent(com.blankj.utilcode.util.ActivityUtils.getTopActivity(), SwitchAccountsActivity.class);
Bundle bundle = new Bundle();
// bundle.putSerializable("userBean", (Serializable) userBean);
intent.putExtra("userBean", (ArrayList<UserBean>) userBean);
intent.putExtras(bundle);
ActivityUtils.startActivity(intent);
if (ActivityUtils.getTopActivity() != null)
ActivityUtils.getTopActivity().finish();
com.blankj.utilcode.util.ActivityUtils.startActivity(intent);
com.blankj.utilcode.util.ActivityUtils.getTopActivity().finish();
}
// EventBus.getDefault().post(new LoginFinishEvent());
@@ -267,19 +265,19 @@ public class LoginPresenter extends BasePresenter<LoginContacter.View> implement
}
public void ysxl() {
Intent intent = new Intent(ActivityUtils.getTopActivity(), WebViewActivity.class);
Intent intent = new Intent(com.blankj.utilcode.util.ActivityUtils.getTopActivity(), WebViewActivity.class);
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl() + "/api/Page/page_show?id=4");
intent.putExtra("title", "隐私协议");
ActivityUtils.startActivity(intent);
com.blankj.utilcode.util.ActivityUtils.startActivity(intent);
// ARouter.getInstance().build(ARouteConstants.H5).withString("url",CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl() + "/api/Page/page_show?id=4").withString("title", "隐私协议").navigation();
}
public void yhxy() {
Intent intent = new Intent(ActivityUtils.getTopActivity(), WebViewActivity.class);
Intent intent = new Intent(com.blankj.utilcode.util.ActivityUtils.getTopActivity(), WebViewActivity.class);
intent.putExtra("url", CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl() + "/api/Page/page_show?id=6");
intent.putExtra("title", "用户协议");
ActivityUtils.startActivity(intent);
com.blankj.utilcode.util.ActivityUtils.startActivity(intent);
// ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getServerUrl() + "/api/Page/page_show?id=6").withString("title", "用户协议").navigation();
}

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools">
<data>
@@ -287,26 +287,26 @@
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_24"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="邀请码"
android:textColor="#73000000"
android:textSize="16sp"
android:textStyle="bold" />
android:layout_marginStart="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_24"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" (非必填)"
android:textColor="#33000000"
android:textSize="12sp" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="邀请码"
android:textColor="#73000000"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" (非必填)"
android:textColor="#33000000"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout

View File

@@ -0,0 +1,6 @@
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="recommend_skip">Skip</string>
</resources>

View File

@@ -0,0 +1,3 @@
<resources>
</resources>

View File

@@ -177,7 +177,7 @@ dependencies {
api('com.zlc.glide:webpdecoder:1.6.4.9.0')
api('com.jungly:gridPasswordView:0.3')
// 使使使RoomTipsView
// 使使使RoomTipsView
api('com.cpiz.bubbleview:bubbleview:1.0.2')
// SDK声网
@@ -223,7 +223,16 @@ dependencies {
api 'com.qcloud.cos:cos-android:5.9.+'
api project(':Loadinglibrary')
api project(':moduletablayout')
implementation "org.jetbrains.kotlin:kotlin-reflect:2.0.21"
// room数据库
// def room_version = "2.5.0"
// implementation "androidx.room:room-runtime:$room_version"
// implementation "androidx.room:room-ktx:$room_version"
// annotationProcessor "androidx.room:room-compiler:$room_version"
//2. normal SDK
//aar的名称WbCloudNormal-v5.1.10-123456789.aar 'WbCloudNormal-v5.1.10-123456789.aar'
}
//apply plugin: 'com.alibaba.arouter' //

View File

@@ -16,7 +16,18 @@
android:exported="true"
android:foregroundServiceType="specialUse" />
<activity
android:name=".activity.WebViewActivity"
android:exported="true">
<intent-filter>
<action android:name="com.qxcm.qxlive.PROTOCOL_WEBVIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".activity.news.OfficialNoticeActivity"
android:exported="false" />
<!-- <service android:name="org.eclipse.paho.android.service.MqttService"-->
<!-- android:exported="false"/> &lt;!&ndash; <receiver android:name="org.eclipse.paho.android.service.AlarmPingSender$AlarmReceiver" &ndash;&gt;-->

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