76 Commits

Author SHA1 Message Date
Max
136b3133ce feat:针对google play的审核调整(无障碍相关) 2024-01-24 11:08:56 +08:00
Max
015922bd90 feat:完善混淆操作文档 2024-01-23 14:43:56 +08:00
Max
8aba5ebaa2 fix:解决googleplay审核问题(onReceivedSslError) 2024-01-23 11:38:28 +08:00
Max
db75f129ee fix:修复压缩路径遍历问题(google play:Zip Path Traversal ) 2024-01-23 11:17:39 +08:00
Max
6cfc44285e chore:移除zego-SDK 2024-01-23 11:16:48 +08:00
Max
8b33e2536a chore:google渠道去掉x86 2024-01-22 19:56:50 +08:00
Max
9d2c83ff6b chore:补充aabres-mapping文件(暂时用不上) 2024-01-22 18:13:57 +08:00
Max
bf9fd90010 混淆配置:添加自定义混淆字典 2024-01-22 18:13:26 +08:00
Max
521d351e92 混淆配置:调整bean相关配置规则 2024-01-22 14:04:40 +08:00
Max
41cd821233 chore:调整App子文件位置 2024-01-22 14:00:06 +08:00
Max
670e305f60 chore:调整app包子文件位置 2024-01-22 13:58:18 +08:00
Max
153898c1a1 chore:补充aabresGuard的依赖配置 2024-01-22 13:49:47 +08:00
Max
b463797df9 混淆配置:添加aabresguard插件及配置 2024-01-22 13:47:30 +08:00
Max
bcd1e37115 混淆配置:内部类补充keep 2024-01-22 13:42:34 +08:00
Max
de48c6c071 feat:调试路径混淆策略 2024-01-20 23:34:00 +08:00
Max
a9c87c7f76 feat:调整Mob初始化参数 2024-01-20 23:32:49 +08:00
Max
bae04574bf 混淆配置:调整混淆配置脚本 2024-01-20 16:38:35 +08:00
Max
718e4eb76d fix:修复分享复制链接点击无响应 2024-01-20 16:32:40 +08:00
Max
4e6a5e0fa5 混淆配置:修改StringExtansion上一级包名为ktx,方便脚本过滤 2024-01-20 14:38:40 +08:00
Max
3a84f71fcd feat:路径混淆支持白名单 2024-01-20 12:16:10 +08:00
Max
72a362f2a6 fix:删除刚刚修改导致的多余字符 2024-01-20 11:45:55 +08:00
Max
f71b49bdcd 混淆配置:调整RxExtenion位置,方便混淆脚本筛选 2024-01-20 11:45:22 +08:00
Max
81310b7d9e 混淆配置:PhotoCompressUtil内部类导致混淆问题 2024-01-20 11:43:41 +08:00
Max
305fc47512 fix:修复VipMainViewModel内LiveData空检验问题 2024-01-20 11:41:11 +08:00
Max
237c98c38d 混淆配置:移除无用类package-info.java 2024-01-20 11:40:18 +08:00
Max
ef7603237d 混淆配置:增加LifecycleCleared包配置,避免混淆失败 2024-01-20 11:37:58 +08:00
Max
0cc5d56f10 chore:调整混淆脚本 2024-01-20 11:34:57 +08:00
Max
9b27d3b395 feat:增加接口路径混淆拦截器 2024-01-19 18:21:13 +08:00
Max
4feed5409d feat:重命名GradientDrawableCreator,文件名与类名不一致导致混淆异常 2024-01-19 12:48:50 +08:00
Max
66fcf3caae feat:替换闪屏页的logo图 2024-01-19 11:25:04 +08:00
Max
74c7b2d3fe feat:修改logo 2024-01-19 11:11:30 +08:00
Max
b3151fda75 chore:重命名code.Constants,移动XChatConstants目录 2024-01-19 11:04:04 +08:00
Max
3b7db71b86 chore:移动包脚本:新增随机包名+md5取反(尽量避免与之前一致) 2024-01-18 19:19:23 +08:00
Max
4a990a4d62 chore:调整混淆规则(减少范围) 2024-01-18 19:11:05 +08:00
Max
e79c75fcbf chore:编译不通过处理:空检验 2024-01-18 19:03:04 +08:00
Max
30ec9bcf03 feat:line引用错误处理 2024-01-18 16:39:10 +08:00
Max
0f6e4f8699 feat:隐藏line相关入口 2024-01-18 16:05:26 +08:00
Max
8a70c1bb32 chore:调整混淆范围 2024-01-18 09:09:17 +08:00
Max
c37ecad328 feat:引入xmlclassguard插件及混淆辅助脚本 2024-01-17 18:46:44 +08:00
Max
c0cbc8b62c chore:调整library-core、utils包命名 2024-01-17 18:31:23 +08:00
Max
d73b530915 chore:正式环境也禁止Crashlytics上传混淆映射文件(暂时不确定是否影响审核) 2024-01-17 17:52:32 +08:00
Max
4788605b46 feat:升级Gradle版本到7.4.2 2024-01-17 17:50:05 +08:00
Max
4f5134a7a1 混淆配置:无用类清理 2024-01-17 17:05:49 +08:00
Max
56d9d8f5da 混淆配置:同名类处理 2024-01-17 17:04:11 +08:00
Max
bd6c421995 混淆配置:ItemEventListener独立,避免干扰 2024-01-17 16:46:54 +08:00
Max
b27df1cb89 混淆配置:处理databing导致混淆问题 2024-01-17 16:45:24 +08:00
Max
fdc7d338c1 混淆配置:xml&databind引用错误处理 2024-01-17 16:37:29 +08:00
Max
29ced00df8 混淆配置:同名类冲突处理 2024-01-17 16:14:34 +08:00
Max
9591c3dc37 混淆配置:补充刚才的修改 2024-01-17 16:14:08 +08:00
Max
5e57ff80ee 混淆配置:扩展类文件隔离,避免失败 2024-01-17 16:09:08 +08:00
Max
9ac9923e3a 混淆配置:重命名StringUtils 2024-01-17 16:05:40 +08:00
Max
710868591a 混淆配置:删除无用工具类ArrayUtils 2024-01-17 15:58:53 +08:00
Max
3b47be1bd5 混淆配置:重命名SystemUtils 2024-01-17 15:54:59 +08:00
Max
33f7c8a7fa 混淆配置:重命名Logger 2024-01-17 15:50:41 +08:00
Max
fa97defc82 混淆配置:重命名TextUtils 2024-01-17 15:46:54 +08:00
Max
f96458c2ac chore;调整firebase配置 2024-01-17 14:21:03 +08:00
Max
287222f7ad chore:调整版本号、google渠道名称 2024-01-17 12:01:24 +08:00
Max
151e5c11b1 chore:修改支付KEY 2024-01-17 11:51:09 +08:00
Max
37b3c941e2 chore:调整包名、签名、正式域名 2024-01-17 11:40:53 +08:00
Max
1333250224 feat:完成文件上传SDK集成(腾讯Cos),移除七牛云文件存储SDK
feat:内置的图片选择框架(Matisse),增加返回图片宽高信息,以及Android33权限适配
fix:修复部分场景Android33权限适配问题
2024-01-16 19:06:46 +08:00
Max
9bd8136f92 chore:补充删除部分推送SDK 2024-01-16 09:32:39 +08:00
Max
527340a357 chore:移除厂商推送SDK 2024-01-15 19:48:30 +08:00
Max
beb6c0a846 chore:移除微信支付、支付宝支付、移除人脸SDK,接入google支付(同步peko代码,未经测试) 2024-01-15 19:30:19 +08:00
Max
b260d2e797 feat:修改第三方SDK配置(IM、声网、TRTC、mob) 2024-01-15 14:40:49 +08:00
Max
81b1cf8124 chore:移除七鱼客服SDK 2024-01-15 14:13:10 +08:00
Max
cbd92a2f10 sync:同步音萌修改记录(针对华为市场审核的调整) 2024-01-15 14:11:55 +08:00
Max
8f0d723fba feat:移除微信、QQ相关的登录分享功能(还未与接口联调测试)
feat:新增google登录、Line登录、Line分享、复制链接(还未与接口联调测试)
2024-01-12 19:15:59 +08:00
Max
db6fdf3266 feat:调整登录页UI(仅UI),移除易盾一键登录SDK 2024-01-12 16:27:18 +08:00
Max
0c1ba80a40 chore:移除umeng-SDK 2024-01-12 15:20:13 +08:00
Max
a7da303a9c feat:移除bugly 2024-01-12 14:57:04 +08:00
Max
3f37821830 feat:集成firebase-analytics、Crashlytics(升级kotlin版本到1.8.22) 2024-01-12 14:08:23 +08:00
Max
56f1ca9f55 feat:移除LinkedMe-SDK 改用MobLink(简单同步Peko,未测试验证) 2024-01-11 19:05:21 +08:00
Max
b9f130b89e feat:屏蔽启动页隐私政策弹窗;
feat:去掉我的(实名认证、青少年、客服中心)入口
feat:去掉设置-绑定支付宝入口
2024-01-11 16:57:17 +08:00
Max
8f31292680 feat:去掉年度盛典icon换回默认的;
feat:关于我们移除备案信息展示
2024-01-11 16:07:39 +08:00
Max
b0d7fdd597 feat:替换加密方式;引入阿里utdid后续设备ID应该用的到 2024-01-11 15:57:35 +08:00
Max
42e26e7f0c feat:升级适配Android13 2024-01-11 14:47:11 +08:00
747 changed files with 12049 additions and 9131 deletions

View File

View File

@@ -1,92 +0,0 @@
{
"agcgw":{
"backurl":"connect-drcn.hispace.hicloud.com",
"url":"connect-drcn.dbankcloud.cn",
"websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com",
"websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn"
},
"agcgw_all":{
"CN":"connect-drcn.dbankcloud.cn",
"CN_back":"connect-drcn.hispace.hicloud.com",
"DE":"connect-dre.dbankcloud.cn",
"DE_back":"connect-dre.hispace.hicloud.com",
"RU":"connect-drru.hispace.dbankcloud.ru",
"RU_back":"connect-drru.hispace.dbankcloud.cn",
"SG":"connect-dra.dbankcloud.cn",
"SG_back":"connect-dra.hispace.hicloud.com"
},
"websocketgw_all":{
"CN":"connect-ws-drcn.hispace.dbankcloud.cn",
"CN_back":"connect-ws-drcn.hispace.dbankcloud.com",
"DE":"connect-ws-dre.hispace.dbankcloud.cn",
"DE_back":"connect-ws-dre.hispace.dbankcloud.com",
"RU":"connect-ws-drru.hispace.dbankcloud.ru",
"RU_back":"connect-ws-drru.hispace.dbankcloud.cn",
"SG":"connect-ws-dra.hispace.dbankcloud.cn",
"SG_back":"connect-ws-dra.hispace.dbankcloud.com"
},
"client":{
"cp_id":"890086000300337421",
"product_id":"736430079244645870",
"client_id":"458482081706542080",
"client_secret":"3573E319CDA06E85137A91CF68CF90BA850A639BCA6655A5310B2BCD81BC7213",
"project_id":"736430079244645870",
"app_id":"102953045",
"api_key":"DAEDAN1bqknzqRuvualUo98vO7U9uXBJtBZ0rNQHgSo03bXgkl98tD4sytVBCBB1Y7ha0NcY++dSp9JLsws9BzDN+/fS3v8J9We3nA==",
"package_name":"cn.nnbc123.voice"
},
"oauth_client":{
"client_id":"102953045",
"client_type":1
},
"app_info":{
"app_id":"102953045",
"package_name":"cn.nnbc123.voice"
},
"service":{
"analytics":{
"collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
"collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com",
"collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
"collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
"collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
"resource_id":"p1",
"channel_id":""
},
"search":{
"url":"https://search-drcn.cloud.huawei.com"
},
"cloudstorage":{
"storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia",
"storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru",
"storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru",
"storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu",
"storage_url_de":"https://ops-dre.agcstorage.link",
"storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn",
"storage_url_sg":"https://ops-dra.agcstorage.link",
"storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn",
"storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn"
},
"ml":{
"mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"
}
},
"region":"CN",
"configuration_version":"3.0",
"appInfos":[
{
"package_name":"cn.nnbc123.voice",
"client":{
"app_id":"102953045"
},
"app_info":{
"package_name":"cn.nnbc123.voice",
"app_id":"102953045"
},
"oauth_client":{
"client_type":1,
"client_id":"102953045"
}
}
]
}

View File

@@ -1,16 +1,17 @@
apply plugin: 'com.android.application'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.huawei.agconnect'
apply from: '../mob.gradle'
apply plugin: 'android-junk-code'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: "com.bytedance.android.aabResGuard"
apply plugin: "xml-class-guard"
android {
compileSdkVersion COMPILE_SDK_VERSION.toInteger()
defaultConfig {
applicationId "cn.nnbc123.voice"
applicationId "app.yinm.chat"
minSdkVersion MIN_SDK_VERSION.toInteger()
targetSdkVersion TARGET_SDK_VERSION.toInteger()
versionCode Integer.valueOf(version_code)
@@ -33,6 +34,15 @@ android {
// }
// }
bundle {
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
//在apk文件后边生成版本号信息
android.applicationVariants.configureEach { variant ->
variant.outputs.configureEach { output ->
@@ -47,7 +57,7 @@ android {
if (abi == null) {
abi = "universal"
}
outputFileName = "yinmeng_${variant.flavorName}_${buildType.name}_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${abi}_${date}.apk"
outputFileName = "yinm_${variant.flavorName}_${buildType.name}_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${abi}_${date}.apk"
}
}
@@ -73,23 +83,13 @@ android {
signingConfigs {
v2 {
storeFile file('../yinmeng.jks')
storePassword "yinmeng2023"
keyAlias "yinmeng"
keyPassword "yinmeng2023"
storeFile file('../yinm.jks')
storePassword "yinm2023"
keyAlias "yinm"
keyPassword "yinm2023"
v2SigningEnabled true
v1SigningEnabled true
}
v1 {
storeFile file('../yinmeng.jks')
storePassword "yinmeng2023"
keyAlias "yinmeng"
keyPassword "yinmeng2023"
v2SigningEnabled false
v1SigningEnabled true
}
}
sourceSets {
@@ -144,8 +144,8 @@ android {
buildTypes {
release {
buildConfigField "String", "BASE_URL", "\"https://api.nnbc123.cn/\""
buildConfigField "String", "WEB_URL", "\"https://h5.nnbc123.cn/\""
buildConfigField "String", "BASE_URL", "\"https://api.yinm.chat/\""
buildConfigField "String", "WEB_URL", "\"https://h5.yinm.chat/\""
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
buildConfigField "String", "BASE_URL_STAGING", "BASE_URL"
buildConfigField "String", "BASE_URL_RELEASE", "BASE_URL"
@@ -153,18 +153,26 @@ android {
shrinkResources true
signingConfig signingConfigs.v2
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [CRASHLYTICS_COLLECTION_ENABLED: "true"]
firebaseCrashlytics {
mappingFileUploadEnabled false
}
}
debug {
buildConfigField "String", "BASE_URL", "\"http://beta.api.nnbc123.cn/\""
buildConfigField "String", "WEB_URL", "\"http://beta.api.nnbc123.cn\""
buildConfigField "String", "BASE_URL", "\"http://beta.api.yinm.chat/\""
buildConfigField "String", "WEB_URL", "\"http://beta.api.yinm.chat\""
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
buildConfigField "String", "BASE_URL_STAGING", "\"https://api.nnbc123.cn/\""
buildConfigField "String", "BASE_URL_RELEASE", "\"https://api.nnbc123.cn/\""
buildConfigField "String", "BASE_URL_STAGING", "\"https://api.yinm.chat/\""
buildConfigField "String", "BASE_URL_RELEASE", "\"https://api.yinm.chat/\""
minifyEnabled false
shrinkResources false
signingConfig signingConfigs.v2
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
firebaseCrashlytics {
mappingFileUploadEnabled false
}
manifestPlaceholders = [CRASHLYTICS_COLLECTION_ENABLED: "false"]
}
}
@@ -185,41 +193,16 @@ android {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
google_yinm {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
mlq {
ndk {
abiFilters 'x86'
}
}
yingyongbao {
ndk {
abiFilters 'armeabi-v7a'
}
}
vivo {
ndk {
abiFilters 'arm64-v8a'
}
}
oppo {
ndk {
abiFilters 'arm64-v8a'
}
}
xiaomi {
ndk {
abiFilters 'arm64-v8a'
}
}
huawei {
ndk {
abiFilters 'arm64-v8a'
}
}
kuaishou_01 {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [
@@ -261,7 +244,6 @@ dependencies {
api "com.ms-square:expandableTextView:0.1.4"
api "com.jakewharton:butterknife:10.2.3"
annotationProcessor "com.jakewharton:butterknife-compiler:10.2.3"
implementation "com.llew.huawei:verifier:1.0.3"
annotationProcessor 'androidx.annotation:annotation:1.2.0'
implementation 'io.github.h07000223:flycoTabLayout:3.0.0'
@@ -292,49 +274,112 @@ dependencies {
implementation 'it.sephiroth.android.library.imagezoom:library:1.0.4'
// 易盾一键登录
implementation 'io.github.yidun:quicklogin:3.1.5'
implementation 'com.github.fodroid:XRadioGroup:v1.5'
//华为推送
implementation 'com.huawei.hms:push:6.5.0.300'
//魅族推送
implementation 'com.meizu.flyme.internet:push-internal:4.1.0'
//oppo推送需要
implementation 'commons-codec:commons-codec:1.6'
// api 'com.tencent.vasdolly:helper:3.0.3'
implementation "io.github.tencent:vap:2.0.24"
implementation 'com.github.mmin18:realtimeblurview:1.2.1'
implementation 'com.qiyukf.unicorn:unicorn:8.2.0'
implementation 'com.github.yalantis:ucrop:2.2.7'
}
repositories {
flatDir {
dirs 'aliyun-libs', 'com.huawei.agconnect'
}
mavenCentral()
}
android.applicationVariants.all { variant ->
print("variant.name=" + variant.name)
if (variant.name.contains("release") || variant.name.contains("Release")) {
androidJunkCode.configMap.put(variant.name, {
packageBase = "com.nnbc123.plugin.ui" //生成java类根包名
packageBase = "app.yinm.a.u" //生成java类根包名
packageCount = 30 //生成包数量
activityCountPerPackage = 30 //每个包下生成Activity类数量
excludeActivityJavaFile = false
//是否排除生成Activity的Java文件,默认false(layout和写入AndroidManifest.xml还会执行),主要用于处理类似神策全埋点编译过慢问题
otherCountPerPackage = 50 //每个包下生成其它类的数量
methodCountPerClass = 20 //每个类下生成方法数量
resPrefix = "mango_" //生成的layout、drawable、string等资源名前缀
resPrefix = "ymc_" //生成的layout、drawable、string等资源名前缀
drawableCount = 300 //生成drawable资源数量
stringCount = 300 //生成string数量
})
}
}
}
aabResGuard {
mappingFile = file("aab-res-guard-mapping.txt").toPath()
// Mapping file used for incremental obfuscation
whiteList = [ // White list rules
// 魅力财富icon
"*.R.drawable.charm_ic_*",
"*.R.drawable.wealth_ic_*",
// ----------
"*.R.raw.*",
"*.R.drawable.icon",
//谷歌服务
"*.R.string.default_web_client_id",
"*.R.string.firebase_database_url",
"*.R.string.gcm_defaultSenderId",
"*.R.string.google_api_key",
"*.R.string.google_app_id",
"*.R.string.google_crash_reporting_api_key",
"*.R.string.google_storage_bucket",
"*.R.string.project_id",
//所有涉及到 getResources().getIdentifier 对应的资源ID
"*.R.array.a1",
"*.R.string.s1",
"*.R.mipmap.m1",
"*.R.dimen.d1",
"*.R.integer.int1",
//Firebase Crashlytics
"*.R.string.com.crashlytics.*",
"*.R.bool.com.crashlytics.useFirebaseAppId",
"*.R.string.com.crashlytics.useFirebaseAppId",
"*.R.bool.com.crashlytics.CollectDeviceIdentifiers",
"*.R.string.com.crashlytics.CollectDeviceIdentifiers",
"*.R.bool.com.crashlytics.CollectUserIdentifiers",
"*.R.string.com.crashlytics.CollectUserIdentifiers",
"*.R.string.com.crashlytics.ApiEndpoint",
"*.R.string.io.fabric.android.build_id",
"*.R.string.com.crashlytics.android.build_id",
"*.R.bool.com.crashlytics.RequireBuildId",
"*.R.string.com.crashlytics.RequireBuildId",
"*.R.bool.com.crashlytics.CollectCustomLogs",
"*.R.string.com.crashlytics.CollectCustomLogs",
"*.R.bool.com.crashlytics.Trace",
"*.R.string.com.crashlytics.Trace",
"*.R.string.com.crashlytics.CollectCustomKeys",
"*.R.string.com.google.firebase.crashlytics.mapping_file_id",
"*.R.string.com.google.firebase.crashlytics.unity_version"
]
obfuscatedBundleFileName = "yinm-google.aab" // Obfuscated file name, must end with '.aab'
mergeDuplicatedRes = true // Whether to allow the merge of duplicate resources
enableFilterFiles = false // Whether to allow filter files
filterList = [ // file filter rules
// "*/arm64-v8a/*",
// "META-INF/*"
]
enableFilterStrings = false // switch of filter strings
unusedStringPath = file("unused.txt").toPath() // strings will be filtered in this file
languageWhiteList = ["en", "zh"] // keep en,en-xx,zh,zh-xx etc. remove others.
}
//以下均为非必须
xmlClassGuard {
findAabConstraintReferencedIds = true
//用于增量混淆的 mapping 文件
mappingFile = file("xml-class-mapping.txt")
//更改manifest文件的package属性即包名
packageChange = ["com.nnbc123.app" : "app.yinm.app",
"com.nnbc123.core" : "app.yinm.cc",
"com.nnbc123.library": "app.yinm.ll"]
moveDir = []
generateObfuscateClassStartName = "ZZZZ"
randomObfuscatePackageNamePlaceholder = ["app.yinm.a.#", "app.yinm.a.a.#", "app.yinm.a.b.#", "app.yinm.a.c.#", "app.yinm.a.d.#", "app.yinm.a.e.#"]
randomObfuscateClassNamePlaceholder = ["#", "#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8", "#9"]
}

29
app/google-services.json Normal file
View File

@@ -0,0 +1,29 @@
{
"project_info": {
"project_number": "414487219613",
"project_id": "yinm-gp-a9649",
"storage_bucket": "yinm-gp-a9649.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:414487219613:android:cb64fc92ca04f431c13374",
"android_client_info": {
"package_name": "app.yinm.chat"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyC8Ekb0HRZzsNq8aBp2qs_97G6h76URl24"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}

Binary file not shown.

Binary file not shown.

View File

@@ -30,6 +30,10 @@
# 保留行号
-keepattributes SourceFile,LineNumberTable
-obfuscationdictionary ./../dictionry.txt
-classobfuscationdictionary ./../dictionry.txt
-packageobfuscationdictionary ./../dictionry.txt
#-dontwarn #//dontwarn去掉警告
#-dontskipnonpubliclibraryclassmembers
#-keep public class * extends android.app.Fragment
@@ -65,8 +69,18 @@
public static final ** CREATOR;
}
-keep class * implements java.io.Serializable {
*;
# 保留 Serializable 序列化的类不被混淆
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
##---------------Begin: proguard configuration for Gson ----------
# Gson specific classes
@@ -114,20 +128,8 @@
-dontwarn com.netease.**
-keep class com.netease.** {*;}
# Presenter 相关
-keep class com.nnbc123.app.base.** { *; }
-keep public class * extends com.nnbc123.app.base.BaseMvpPresenter
-keep public class * extends com.nnbc123.library.base.factory.AbstractMvpPresenter
# 云信自定义 ViewHolder 配置
-dontwarn com.nnbc123.app.ui.im.recent.holder.**
-keep class com.nnbc123.app.ui.im.recent.holder.** {*;}
-keep class com.nnbc123.app.ui.im.chat.** {*;}
-keep class com.nnbc123.app.luckymoney.viewholder.** {*;}
-keep class com.nnbc123.app.share.viewholder.** {*;}
-keep class com.nnbc123.app.public_chat_hall.msg.viewholder.** {*;}
-keep class com.nnbc123.app.module_hall.im.msgholder.** {*;}
-keep class com.nnbc123.app.mentoring_relationship.viewholder.** {*;}
-keep public class * extends com.netease.nim.uikit.common.ui.recyclerview.holder.RecyclerViewHolder {*;}
-keep public class * extends com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase {*;}
@@ -168,16 +170,9 @@
#-------------云信相关的混淆配置------------
#-------------TakePhoto的混淆配置------------
-keep class com.nnbc123.app.takephoto.** { *; }
-dontwarn com.jph.takephoto.**
-keep class com.darsh.multipleimageselect.** { *; }
-dontwarn com.darsh.multipleimageselect.**
-keep class com.soundcloud.android.crop.** { *; }
-dontwarn com.soundcloud.android.crop.**
#-------------TakePhoto的混淆配置------------
@@ -207,9 +202,6 @@
<init>(...);
}
-dontwarn com.nnbc123.app.bindadapter.**
-keep class com.nnbc123.app.bindadapter.** {*;}
# Ping++ 混淆过滤
-dontwarn com.pingplusplus.**
-keep class com.pingplusplus.** {*;}
@@ -237,10 +229,24 @@
}
# @Keep
-keep,allowobfuscation @interface android.support.annotation.Keep
-keep @android.support.annotation.Keep class *
-keepclassmembers class * {
@android.support.annotation.Keep *;
}
-keep,allowobfuscation @interface androidx.annotation.Keep
-keep @androidx.annotation.Keep class *
-keepclassmembers class * {
@androidx.annotation.Keep *;
}
# TODO 网络加载 一些业务bean gson 时候混淆问题
-keep class org.json.** {*;}
-dontwarn com.nnbc123.core.**
-keep class com.nnbc123.core.** {*;}
-keep class **.bean.** {*;}
-keep class **.result.** {*;}
-keep class **.entity.** {*;}
#百度统计
@@ -313,10 +319,6 @@
-keep class com.amap.api.fence.**{*;}
-keep class com.autonavi.aps.amapapi.model.**{*;}
#暂时keep这个View排查华为oom问题
-keep class com.nnbc123.app.avroom.widget.MicroView{*;}
-keep class com.nnbc123.app.ui.widget.rollviewpager.RollPagerView{*;}
#linkedMe
-keep class com.microquation.linkedme.android.** { *; }
@@ -333,7 +335,13 @@
-dontwarn com.sdk.**
-keep class com.sdk.** { *;}
-keep class cn.com.chinatelecom.account.**{*;}
-keep public class * extends android.view.View
-keep public class * extends android.view.View {
*** get*();
void set*(***);
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keep class com.netease.nis.quicklogin.entity.**{*;}
-keep class com.netease.nis.quicklogin.listener.**{*;}
-keep class com.netease.nis.quicklogin.QuickLogin{
@@ -373,8 +381,6 @@
-dontwarn com.meizu.cloud.**
-keep class com.meizu.cloud.** {*;}
-keep class com.nnbc123.app.ui.widget.AppBarLayoutBehavior {*;}
#ViewBinding使用的反射生成的对应Binding
-keepclassmembers class * implements androidx.viewbinding.ViewBinding {
public static ** inflate(***);
@@ -450,7 +456,7 @@
-keep class android.support.v8.renderscript.** { *; }
-keep class androidx.renderscript.** { *; }
-keep class com.nnbc123.plugin.ui.**{*;}
-keep class app.yinm.plugin.ui.**{*;}
-dontwarn com.qiyukf.**
-keep class com.qiyukf.** {*;}
@@ -461,3 +467,8 @@
-keep class androidx.recyclerview.widget.** { *; }
-keep class androidx.viewpager2.widget.** { *; }
-keep class io.agora.**{*;}
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers.
-keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
-keep class com.google.android.exoplayer2.** {*;}
-keep interface com.google.android.exoplayer2.**

View File

@@ -24,8 +24,15 @@
<!-- 控制呼吸灯,振动器等,用于新消息提醒 -->
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 外置存储存取权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 多媒体相关 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
@@ -67,13 +74,7 @@
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<!-- 适配安卓12&11获取当前已安装的所有应用列表-->
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
</intent>
</queries>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application
android:name="com.nnbc123.app.application.XChatApplication"
android:allowBackup="false"
@@ -86,6 +87,9 @@
android:theme="@style/MyMaterialTheme"
android:usesCleartextTraffic="true"
tools:replace="android:name,android:allowBackup">
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${CRASHLYTICS_COLLECTION_ENABLED}" />
<!-- 多渠道 -->
<meta-data
android:name="CHANNEL"
@@ -178,14 +182,7 @@
<action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE" />
</intent-filter>
</service>
<service
android:name="com.nnbc123.app.push.OppoPushService"
android:exported="false"
android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE">
<intent-filter>
<action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" />
</intent-filter>
</service> <!-- 云信集成oppo推送 end -->
<!-- 云信集成oppo推送 end -->
<!-- 云信集成华为推送 start -->
<service
android:name="com.netease.nimlib.mixpush.hw.HWPushService"
@@ -203,41 +200,6 @@
android:authorities="${applicationId}.ipc.provider"
android:exported="false"
android:process=":core" /> <!-- 配置的service和receiver -->
<service
android:name="com.xiaomi.push.service.XMPushService"
android:enabled="true"
android:process=":mixpush" />
<service
android:name="com.xiaomi.push.service.XMJobService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":mixpush" /> <!--此service必须在3.0.1版本以后包括3.0.1版本)加入 -->
<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="false" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" /> <!--此service必须在2.2.5版本以后包括2.2.5版本)加入 -->
<receiver
android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
android:exported="true"
tools:node="remove">>
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver
android:name="com.xiaomi.push.service.receivers.PingReceiver"
android:exported="false"
android:process=":mixpush">
<intent-filter>
<action android:name="com.xiaomi.push.PING_TIMER" />
</intent-filter>
</receiver>
<receiver
android:name="com.netease.nimlib.mixpush.mi.MiPushReceiver"
android:exported="true">
@@ -247,27 +209,8 @@
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
<receiver
android:name="com.nnbc123.app.push.MiPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver> <!-- 云信集成小米推送 end -->
<!-- 云信集成小米推送 end -->
<!-- 云信继承vivo推送 start -->
<service
android:name="com.vivo.push.sdk.service.CommandClientService"
android:exported="true"
android:permission="com.push.permission.UPSTAGESERVICE" />
<activity
android:name="com.vivo.push.sdk.LinkProxyClientActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<receiver
android:name="com.netease.nimlib.mixpush.vivo.VivoPushReceiver"
android:exported="false">
@@ -278,24 +221,6 @@
</intent-filter>
</receiver>
<receiver
android:name="com.qiyukf.nimlib.service.NimReceiver"
android:exported="false"
android:process=":core"
tools:node="remove">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<service
android:name="com.qiyukf.nimlib.job.NIMJobService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":core"
tools:node="remove" />
<meta-data
android:name="com.vivo.push.api_key"
android:value="8de0df98690ba00225b88313aaee754f" />
@@ -321,16 +246,7 @@
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
<receiver
android:name="com.nnbc123.app.push.MeizuPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.meizu.flyme.push.intent.MESSAGE" />
<action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />
<action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />
</intent-filter>
</receiver> <!-- 云信集成魅族推送 end -->
</receiver><!-- 云信集成魅族推送 end -->
<!-- 云信配置 end ##################################################### -->
<!-- &lt;!&ndash; 安卓保活配置 &ndash;&gt; -->
<!-- <service -->
@@ -374,35 +290,6 @@
android:resource="@xml/provider_paths" />
</provider>
<activity
android:name="com.nnbc123.app.push.HWPushMiddleActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="com.huawei.codelabpush"
android:path="/deeplink"
android:scheme="yinmengpushscheme" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.bugly.beta.ui.BetaActivity"
android:configChanges="keyboardHidden|orientation|screenSize|locale"
android:theme="@android:style/Theme.Translucent" />
<activity
android:name="com.nnbc123.core.pay.PaymentActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /> <!-- tinker配置 end ########################################################## -->
<!-- 支付相关配置 -->
<!-- 微信支付需要注册 -->
<activity-alias
android:name="${applicationId}.wxapi.WXPayEntryActivity"
android:exported="true"
android:targetActivity="com.nnbc123.core.pay.PaymentActivity" /> <!-- 支付相关配置 -->
<!-- shareSDK配置 end ####################################################### -->
<service
android:name="com.nnbc123.app.service.DaemonService"
@@ -430,8 +317,8 @@
<!-- 此处scheme值需要替换为后台设置中的scheme值 -->
<data
android:host="linkedme"
android:scheme="yinmengnnbc" />
android:host="main"
android:scheme="yinmapp" />
<action android:name="android.intent.action.VIEW" />
@@ -477,7 +364,7 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="com.nnbc123.app.UserGuideActivity"
android:name="com.nnbc123.app.guide.UserGuideActivity"
android:label="引导页"
android:screenOrientation="portrait" />
<activity
@@ -487,7 +374,7 @@
android:name="com.nnbc123.app.ui.search.SearchUserActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.nnbc123.app.MainActivity"
android:name="com.nnbc123.app.main.MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="音萌"
android:launchMode="singleTask"
@@ -498,15 +385,7 @@
android:screenOrientation="portrait"
android:theme="@style/OnePixelActivity" />
<activity
android:name="com.nnbc123.app.MiddleActivity"
android:noHistory="true"
android:screenOrientation="portrait">
<meta-data
android:name="linkedme.sdk.auto_link_keys"
android:value="linkedme" />
</activity>
<activity
android:name="com.nnbc123.app.NimMiddleActivity"
android:name="com.nnbc123.app.ui.im.NimMiddleActivity"
android:noHistory="true"
android:screenOrientation="portrait" />
<activity
@@ -783,7 +662,7 @@
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name="com.nnbc123.app.ErbanTakePhotoActivity"
android:name="com.nnbc123.app.takephoto.app.ErbanTakePhotoActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
@@ -1243,6 +1122,9 @@
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/AppThemeUCrop" />
<activity
android:name=".ui.agent.AgentActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
</manifest>

View File

@@ -1,77 +0,0 @@
package com.nnbc123.app;
import android.os.Bundle;
import android.util.Log;
import com.microquation.linkedme.android.LinkedME;
import com.microquation.linkedme.android.util.LinkProperties;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.nnbc123.app.base.BaseActivity;
import com.nnbc123.core.linked.LinkedModel;
import com.nnbc123.core.linked.bean.LinkedInfo;
import java.util.HashMap;
/**
* Created by chenran on 2017/8/5.
*/
public class MiddleActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent() != null) {
//获取与深度链接相关的值
LinkProperties linkProperties = getIntent().getParcelableExtra(LinkedME.LM_LINKPROPERTIES);
if (linkProperties != null) {
Log.i("LinkedME-Demo", "Channel " + linkProperties.getChannel());
Log.i("LinkedME-Demo", "control params " + linkProperties.getControlParams());
Log.i("LinkedME-Demo", "link(深度链接) " + linkProperties.getLMLink());
Log.i("LinkedME-Demo", "是否为新安装 " + linkProperties.isLMNewUser());
//获取自定义参数封装成的hashmap对象,参数键值对由集成方定义
HashMap<String, String> hashMap = linkProperties.getControlParams();
LogUtil.print("linkedme", hashMap);
//根据key获取传入的参数的值,该key关键字View可为任意值,由集成方规定,请与web端商议,一致即可
LinkedInfo linkedInfo = new LinkedInfo();
linkedInfo.setNewUser(linkProperties.isLMNewUser());
String roomuid = hashMap.get("roomuid");
String uid = hashMap.get("uid");
String channel = hashMap.get("linkedmeChannel");
String type = hashMap.get("type");
String familyId = hashMap.get("familyId");
String url = hashMap.get("url");
String worldId = hashMap.get("worldId");
String dynamicId = hashMap.get("dynamicId");
String inviteCode = hashMap.get("inviteCode");
if (roomuid != null) {
linkedInfo.setRoomUid(roomuid);
}
if (uid != null) {
linkedInfo.setUid(uid);
}
if (type != null) {
linkedInfo.setType(type);
}
if (familyId != null) {
linkedInfo.setFamilyId(familyId);
}
if (url != null) {
linkedInfo.setUrl(url);
}
if (worldId != null) {
linkedInfo.setWorldId(worldId);
}
if (dynamicId != null) {
linkedInfo.setDynamicId(dynamicId);
}
linkedInfo.setInviteCode(inviteCode);
LinkedModel.get().setLinkedInfo(linkedInfo);
}
}
finish();
}
}

View File

@@ -1,25 +1,15 @@
package com.nnbc123.app.application;
import static com.nnbc123.xchat_android_constants.XChatConstants.HW_APP_ID;
import static com.nnbc123.xchat_android_constants.XChatConstants.HW_CERTIFICATE_NAME;
import static com.nnbc123.xchat_android_constants.XChatConstants.OPPO_APP_ID;
import static com.nnbc123.xchat_android_constants.XChatConstants.OPPO_APP_KEY;
import static com.nnbc123.xchat_android_constants.XChatConstants.OPPO_CERTIFICATE_NAME;
import static com.nnbc123.xchat_android_constants.XChatConstants.OPPO_SECRET;
import static com.nnbc123.xchat_android_constants.XChatConstants.VIVO_CERTIFICATE_NAME;
import static com.nnbc123.xchat_android_constants.XChatConstants.XM_APP_ID;
import static com.nnbc123.xchat_android_constants.XChatConstants.XM_APP_KEY;
import static com.nnbc123.xchat_android_constants.XChatConstants.XM_CERTIFICATE_NAME;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_HEADER_TYPE_OPEN_ROOM_NOTI;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.graphics.Color;
import android.net.http.HttpResponseCache;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -28,15 +18,13 @@ import androidx.multidex.MultiDex;
import com.bumptech.glide.request.target.ViewTarget;
import com.bytedance.hume.readapk.HumeSDK;
import com.chuhai.utils.MetaDataUtils;
import com.chu.utils.MetaDataUtils;
import com.coorchice.library.utils.LogUtils;
import com.facebook.stetho.Stetho;
import com.heytap.msp.push.HeytapPushManager;
import com.hjq.toast.ToastUtils;
import com.huawei.hms.support.common.ActivityMgr;
import com.llew.huawei.verifier.LoadedApkHuaWei;
import com.microquation.linkedme.android.LinkedME;
import com.mob.MobSDK;
import com.mob.moblink.MobLink;
import com.mob.moblink.RestoreSceneListener;
import com.mob.moblink.Scene;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMClient;
@@ -49,7 +37,8 @@ import com.netease.nimlib.sdk.msg.MessageNotifierCustomization;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.nnbc123.app.qiyukefu.CustomerServerHelper;
import com.nnbc123.app.ui.agent.AgentActivity;
import com.nnbc123.core.interceptor.PathInterceptor;
import com.nnbc123.library.common.application.BaseApp;
import com.nnbc123.library.common.file.FileHelper;
import com.nnbc123.library.utils.ResUtil;
@@ -59,23 +48,16 @@ import com.orhanobut.logger.Logger;
import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import com.tencent.bugly.crashreport.CrashReport;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.nnbc123.core.statistic.StatisticManager;
import com.nnbc123.app.BuildConfig;
import com.nnbc123.app.MainActivity;
import com.nnbc123.app.MiddleActivity;
import com.nnbc123.app.NimMiddleActivity;
import com.nnbc123.app.ui.im.NimMiddleActivity;
import com.nnbc123.app.R;
import com.nnbc123.app.module_hall.HallDataManager;
import com.nnbc123.app.other.activity.SplashActivity;
import com.nnbc123.app.quick_pass.QuickPassLoginAct;
import com.nnbc123.app.radish.wallet.RadishWalletManager;
import com.nnbc123.app.utils.PushMessageHandler;
import com.nnbc123.xchat_android_constants.XChatConstants;
import com.nnbc123.core.Constants;
import com.nnbc123.core.XChatConstants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.DemoCache;
import com.nnbc123.core.Env;
import com.nnbc123.core.UriProvider;
@@ -98,7 +80,6 @@ import com.nnbc123.core.public_chat_hall.model.PublicChatHallModel;
import com.nnbc123.core.radish.RadishModel;
import com.nnbc123.core.radish.signin.bean.ImNotice;
import com.nnbc123.core.room.face.DynamicFaceModel;
import com.nnbc123.core.statistic.StatisticManager;
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.core.user.UserModel;
import com.nnbc123.core.user.event.NeedCompleteInfoEvent;
@@ -214,9 +195,9 @@ public class XChatApplication extends BaseApp {
long startTime = System.currentTimeMillis();
String channel;
channel = MetaDataUtils.INSTANCE.getStringData(Constants.CHANNEL_KEY, application);
channel = MetaDataUtils.INSTANCE.getStringData(CoreConstants.CHANNEL_KEY, application);
if (TextUtils.isEmpty(channel)) {
channel = "official";
channel = com.nnbc123.library.common.Constants.CHANNEL_DEF;
}
Log.d("XChatApplication", "channel:" + channel);
BasicConfig.INSTANCE.setOriginalChannel(channel);
@@ -233,7 +214,6 @@ public class XChatApplication extends BaseApp {
initEnv();
ActivityMgr.INST.init((Application) context);
//延迟初始化云信
NIMClient.init(context, null, options());
@@ -247,8 +227,6 @@ public class XChatApplication extends BaseApp {
ToastUtils.init(application);
if (inMainProcess(context)) {
HeytapPushManager.init(context, true);
DemoCache.saveLaunchCount();
// 注册自定义推送消息处理,这个是可选项
NIMPushClient.registerMixPushMessageHandler(new PushMessageHandler());
@@ -277,37 +255,15 @@ public class XChatApplication extends BaseApp {
ViewTarget.setTagId(R.id.tag_glide);
init(channel);
initStetho(context);
if (!TextUtils.isEmpty(channel)) {
CrashReport.setAppChannel(context, channel);
}
initBuglyUpdate();
Bugly.init(context, BuildConfig.DEBUG ? XChatConstants.BUGLY_KEY_DEBUG : XChatConstants.BUGLY_KEY_RELEASE, BuildConfig.DEBUG);
//生命周期监听
if (lifeManager == null) {
lifeManager = new ActivityLifeManager();
}
registerActivityLifecycleCallback(lifeManager);
dealHuaWeiCrash();
initLinkedMe();
LinkedME.getInstance().setImmediate(true);
MobSDK.init(context);
MobSDK.submitPolicyGrantResult(true);
// 友盟统计初始化
UMConfigure.init(context, XChatConstants.UMENG_APP_KEY,
BasicConfig.INSTANCE.getChannel(), UMConfigure.DEVICE_TYPE_PHONE, null);
// 选用MANUAL页面采集模式
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.MANUAL);
// 支持在子进程中统计自定义事件
UMConfigure.setProcessEvent(true);
// 日志加密
UMConfigure.setEncryptEnabled(true);
// 集成测试
UMConfigure.setLogEnabled(BuildConfig.DEBUG);
} else {
CustomerServerHelper.init(instance, null);
}
LogUtils.d("init time = " + (System.currentTimeMillis() - startTime) + "ms");
@@ -319,15 +275,21 @@ public class XChatApplication extends BaseApp {
* 初始化linkedMe
*/
private static void initLinkedMe() {
LinkedME.getInstance(instance, XChatConstants.LINKED_ME_KEY);
if (isDebug()) {
//设置debug模式下打印LinkedME日志
LinkedME.getInstance().setDebug();
}
//初始时请设置为false
LinkedME.getInstance().setImmediate(false);
//设置处理跳转逻辑的中转页MiddleActivity详见后续配置
LinkedME.getInstance().setHandleActivity(MiddleActivity.class.getName());
MobSDK.init(instance, "391a13e3d2f0f", "66c1b96ec3546d4df709154dc3069a7d");
MobLink.setRestoreSceneListener(new RestoreSceneListener() {
@Override
public Class<? extends Activity> willRestoreScene(Scene scene) {
return AgentActivity.class;
}
@Override
public void completeRestore(Scene scene) {
}
@Override
public void notFoundScene(Scene scene) {
}
});
}
private static void initEnv() {
@@ -335,24 +297,12 @@ public class XChatApplication extends BaseApp {
Env.initEnv(BuildConfig.BUILD_TYPE, BuildConfig.DEBUG);
//切换生产坏境和测试环境 true/测试环境 false/生产环境
BasicConfig.INSTANCE.setDebuggable(Env.isDebug());
BasicConfig.INSTANCE.setRootDir(Constants.ERBAN_DIR_NAME);
BasicConfig.INSTANCE.setLogDir(Constants.LOG_DIR);
BasicConfig.INSTANCE.setConfigDir(Constants.CONFIG_DIR);
BasicConfig.INSTANCE.setVoiceDir(Constants.VOICE_DIR);
BasicConfig.INSTANCE.setCacheDir(Constants.CACHE_DIR);
BasicConfig.INSTANCE.setImageDir(Constants.IMAGE_CACHE_DIR);
}
private static void dealHuaWeiCrash() {
String brand = Build.BRAND;
String manufacturer = Build.MANUFACTURER;
if (!TextUtils.isEmpty(brand) && (
"HUAWEI".toLowerCase().equals(brand.toLowerCase())
|| "HONOR".toLowerCase().equals(brand.toLowerCase())
|| "HUAWEI".equals(manufacturer))) {
LoadedApkHuaWei.hookHuaWeiVerifier((Application) instance.getApplicationContext());
}
BasicConfig.INSTANCE.setRootDir(CoreConstants.ERBAN_DIR_NAME);
BasicConfig.INSTANCE.setLogDir(CoreConstants.LOG_DIR);
BasicConfig.INSTANCE.setConfigDir(CoreConstants.CONFIG_DIR);
BasicConfig.INSTANCE.setVoiceDir(CoreConstants.VOICE_DIR);
BasicConfig.INSTANCE.setCacheDir(CoreConstants.CACHE_DIR);
BasicConfig.INSTANCE.setImageDir(CoreConstants.IMAGE_CACHE_DIR);
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@@ -389,7 +339,7 @@ public class XChatApplication extends BaseApp {
// 定制通知栏提醒文案可选如果不定制将采用SDK默认文案
options.messageNotifierCustomization = messageNotifierCustomization;
options.appKey = Constants.nimAppKey;
options.appKey = CoreConstants.nimAppKey;
options.shouldConsiderRevokedMessageUnreadCount = true;
// 配置保存图片文件log 等数据的目录
@@ -415,21 +365,6 @@ public class XChatApplication extends BaseApp {
DemoCache.setNotificationConfig(config);
MixPushConfig mixPushConfig = new MixPushConfig();
//华为推送
mixPushConfig.hwAppId = HW_APP_ID;
mixPushConfig.hwCertificateName = HW_CERTIFICATE_NAME;
//小米推送
mixPushConfig.xmAppId = XM_APP_ID;
mixPushConfig.xmAppKey = XM_APP_KEY;
mixPushConfig.xmCertificateName = XM_CERTIFICATE_NAME;
//vivo推送
mixPushConfig.vivoCertificateName = VIVO_CERTIFICATE_NAME;
//oppo推送
mixPushConfig.oppoAppId = OPPO_APP_ID;
mixPushConfig.oppoAppKey = OPPO_APP_KEY;
mixPushConfig.oppoAppSercet = OPPO_SECRET;
mixPushConfig.oppoCertificateName = OPPO_CERTIFICATE_NAME;
options.mixPushConfig = mixPushConfig;
return options;
@@ -447,58 +382,6 @@ public class XChatApplication extends BaseApp {
return packageName.equals(processName);
}
/**
* 初始化bugly版本升级
*/
private static void initBuglyUpdate() {
/***** Beta高级设置 *****/
/**
* true表示app启动自动初始化升级模块;
* false不会自动初始化;
* 开发者如果担心sdk初始化影响app启动速度可以设置为false
* 在后面某个时刻手动调用Beta.init(getApplicationContext(),false);
*/
// Beta.autoInit = true;
/**
* true表示初始化时自动检查升级;
* false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法;
*/
// Beta.autoCheckUpgrade = true;
/**
* 设置升级检查周期为60s(默认检查周期为0s)60s内SDK不重复向后台请求策略);
*/
// Beta.upgradeCheckPeriod = 60 * 1000;
/**
* 设置启动延时为1s默认延时3sAPP启动1s后初始化SDK避免影响APP启动速度;
*/
Beta.initDelay = 6 * 1000;
/**
* 设置sd卡的Download为更新资源保存目录;
* 后续更新资源会保存在此目录需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
*/
// Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
/**
* 点击过确认的弹窗在APP下次启动自动检查更新时会再次显示;
*/
Beta.showInterruptedStrategy = true;
/**
* 只允许在MainActivity上显示更新弹窗其他activity上不显示弹窗;
* 不设置会默认所有activity都可以显示弹窗;
* 2021/6/22 增加登录页面也可以弹出,万一域名挂了还可以用bugly更新!!
*/
Beta.canShowUpgradeActs.add(MainActivity.class);
Beta.canShowUpgradeActs.add(QuickPassLoginAct.class);
/**
* 自定义布局
*/
Beta.upgradeDialogLayoutId = R.layout.upgrade_dialog;//关键代码写这个布局添加自己想要的
}
/**
* 初始化RxNet
*
@@ -522,6 +405,7 @@ public class XChatApplication extends BaseApp {
RxNet.init(context)
.debug(BuildConfig.DEBUG)
.setBaseUrl(url)
.addInterceptors(new PathInterceptor())
.addInterceptors(new ParamsInterceptor(httpParams))
.addInterceptors(new NoParamsInterceptor())//注意:拦截器的添加顺序,请求的拦截顺序
.build();
@@ -661,24 +545,9 @@ public class XChatApplication extends BaseApp {
@Override
public void onTerminate() {
super.onTerminate();
CrashReport.closeBugly();
if (lifeManager != null) {
unregisterActivityLifecycleCallbacks(lifeManager);
}
GlobalHandleManager.get().unInit();
}
/**
* 初始化Stetho网络调试
*/
private static void initStetho(Context context) {
if (Env.isDebug()) {
Stetho.initialize(
Stetho.newInitializerBuilder(context)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(context))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(context))
.build()
);
}
}
}

View File

@@ -10,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
import com.nnbc123.app.R;
import com.nnbc123.app.UIHelper;
import com.nnbc123.app.utils.UIHelper;
import com.nnbc123.app.audio.adapter.MyVoiceListAdapter;
import com.nnbc123.app.audio.helper.AudioPlayerHelper;
import com.nnbc123.app.audio.presenter.MyVoicePresenter;

View File

@@ -20,7 +20,7 @@ import com.opensource.svgaplayer.SVGACallback;
import com.opensource.svgaplayer.SVGAImageView;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.nnbc123.app.R;
import com.nnbc123.app.UIHelper;
import com.nnbc123.app.utils.UIHelper;
import com.nnbc123.app.audio.helper.AudioPlayerHelper;
import com.nnbc123.app.audio.helper.OnPlayListener;
import com.nnbc123.app.audio.helper.OnRefreshListener;

View File

@@ -12,7 +12,7 @@ import com.chad.library.adapter.base.BaseViewHolder;
import com.nnbc123.app.R;
import com.nnbc123.app.audio.widget.VoiceLine;
import com.nnbc123.core.audio.bean.UserVoiceInfo;
import com.nnbc123.core.utils.StringUtils;
import com.nnbc123.core.utils.CStringUtils;
import java.util.List;
import java.util.Locale;
@@ -103,7 +103,7 @@ public class MyVoiceListAdapter extends BaseQuickAdapter<UserVoiceInfo, BaseView
});
// 点击播放声音/停止声音
helper.voiceBarLayout.setOnClickListener(view -> {
if (StringUtils.isEmpty(item.getVoiceUrl())) {
if (CStringUtils.isEmpty(item.getVoiceUrl())) {
return;
}
boolean isChange = helper.getAdapterPosition() != voiceClickPos;
@@ -138,7 +138,7 @@ public class MyVoiceListAdapter extends BaseQuickAdapter<UserVoiceInfo, BaseView
});
// 点击播放声音/停止声音
helper.voiceBarLayout.setOnClickListener(view -> {
if (StringUtils.isEmpty(item.getVoiceUrl())) {
if (CStringUtils.isEmpty(item.getVoiceUrl())) {
return;
}
boolean isChange = helper.getAdapterPosition() != voiceClickPos;
@@ -175,7 +175,7 @@ public class MyVoiceListAdapter extends BaseQuickAdapter<UserVoiceInfo, BaseView
});
// 点击播放声音/停止声音
helper.voiceBarLayout.setOnClickListener(view -> {
if (StringUtils.isEmpty(item.getVoiceUrl())) {
if (CStringUtils.isEmpty(item.getVoiceUrl())) {
return;
}
boolean isChange = helper.getAdapterPosition() != voiceClickPos;

View File

@@ -11,7 +11,7 @@ import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import javax.annotation.Nullable;
import androidx.annotation.Nullable;
import io.reactivex.Single;
import io.reactivex.SingleOnSubscribe;

View File

@@ -14,7 +14,7 @@ import android.widget.TextView;
import com.coorchice.library.SuperTextView;
import com.opensource.svgaplayer.SVGAImageView;
import com.nnbc123.app.R;
import com.nnbc123.app.UIHelper;
import com.nnbc123.app.utils.UIHelper;
import com.nnbc123.app.audio.VoiceMatchActivity;
import com.nnbc123.app.audio.helper.OnPlayListener;
import com.nnbc123.app.audio.helper.SvgaCacheManager;
@@ -22,7 +22,7 @@ import com.nnbc123.app.audio.helper.VmSoundManager;
import com.nnbc123.app.common.widget.CircleImageView;
import com.nnbc123.app.ui.utils.ImageLoadUtils;
import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil;
import com.nnbc123.xchat_android_constants.XChatConstants;
import com.nnbc123.core.XChatConstants;
import com.nnbc123.core.audio.bean.VoiceMatchInfo;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.statistic.StatisticManager;

View File

@@ -10,7 +10,7 @@ import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.orhanobut.logger.Logger;
import com.nnbc123.app.R;
import com.nnbc123.app.UIHelper;
import com.nnbc123.app.utils.UIHelper;
import com.nnbc123.app.avroom.widget.ViewItem;
import com.nnbc123.app.common.widget.dialog.DialogManager;
import com.nnbc123.app.public_chat_hall.widget.ShutUpDialog;

View File

@@ -72,7 +72,7 @@ import com.nnbc123.app.ui.widget.dialog.AllServiceGiftLevelTwoDialog;
import com.nnbc123.app.ui.widget.dialog.MonsterDialog;
import com.nnbc123.app.ui.widget.marqueeview.Utils;
import com.nnbc123.app.utils.UserUtils;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.DemoCache;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.auth.event.LogoutEvent;
@@ -90,9 +90,9 @@ import com.nnbc123.core.module_hall.hall.HallModel;
import com.nnbc123.core.module_hall.hall.bean.SuperAdminInfo;
import com.nnbc123.core.monsterhunting.bean.MonsterHuntingResult;
import com.nnbc123.core.monsterhunting.bean.MonsterInfo;
import com.nnbc123.core.monsterhunting.bean.MonsterProtocol;
import com.nnbc123.core.monsterhunting.bean.MonsterProtocolDataBean;
import com.nnbc123.core.monsterhunting.manager.MonsterDataManager;
import com.nnbc123.core.noble.AllServiceGiftProtocol;
import com.nnbc123.core.noble.AllServiceGiftProtocolDataBean;
import com.nnbc123.core.noble.NobleInfo;
import com.nnbc123.core.noble.NobleResourceType;
import com.nnbc123.core.noble.NobleUtil;
@@ -116,7 +116,7 @@ import com.nnbc123.core.super_admin.util.SuperAdminUtil;
import com.nnbc123.core.user.UserModel;
import com.nnbc123.core.user.bean.UserInfo;
import com.nnbc123.core.utils.LogUtils;
import com.nnbc123.core.utils.StringUtils;
import com.nnbc123.core.utils.CStringUtils;
import com.nnbc123.library.base.factory.CreatePresenter;
import com.nnbc123.library.rxbus.RxBus;
import com.nnbc123.library.utils.JavaUtil;
@@ -127,7 +127,6 @@ import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import com.orhanobut.logger.Logger;
import com.tencent.bugly.crashreport.CrashReport;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -198,7 +197,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
private GiftBroadcastObserver giftObserver;
private Dialog giftDialog;
private LinkedList<AllServiceGiftProtocol.DataBean> giftList;
private LinkedList<AllServiceGiftProtocolDataBean> giftList;
private boolean isResume = true;
@Nullable
private SingleRoomTipDialog singleRoomTipDialog;
@@ -236,8 +235,8 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
return;
}
Intent intent = new Intent(context, AVRoomActivity.class);
intent.putExtra(Constants.ROOM_INFO, (Parcelable) roomInfo);
intent.putExtra(Constants.ROOM_UID, roomInfo.getUid());
intent.putExtra(CoreConstants.ROOM_INFO, (Parcelable) roomInfo);
intent.putExtra(CoreConstants.ROOM_UID, roomInfo.getUid());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_INTO_ROOM_CLICK, "进入房间");
@@ -255,7 +254,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
return;
}
Intent intent = new Intent(context, AVRoomActivity.class);
intent.putExtra(Constants.ROOM_UID, roomUid);
intent.putExtra(CoreConstants.ROOM_UID, roomUid);
intent.putExtra("fromType", fromType);
if (!TextUtils.isEmpty(fromNick)) {
intent.putExtra("fromNick", fromNick);
@@ -277,7 +276,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
public static void setBackBg(Context context, RoomInfo roomInfo, SVGAImageView svgaRoomBg, String[] bgPicture) {
if (roomInfo != null && svgaRoomBg != null) {
if (roomInfo.getRoomBackground() != null) {
if (!StringUtils.isBlank(roomInfo.getRoomBackground().getPicUrl())) {
if (!CStringUtils.isBlank(roomInfo.getRoomBackground().getPicUrl())) {
int resourceType = NobleUtil.getResourceType(roomInfo.getRoomBackground().getPicUrl());
if (resourceType == NobleResourceType.URLS) {
if (!roomInfo.getRoomBackground().getPicUrl().equals(bgPicture[0])) {
@@ -291,7 +290,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
}
}
}
} else if (!StringUtils.isBlank(roomInfo.getBackPic())) {
} else if (!CStringUtils.isBlank(roomInfo.getBackPic())) {
int resourceType = NobleUtil.getResourceType(roomInfo.getBackPic());
if (resourceType == NobleResourceType.URLS) {
if (!roomInfo.getBackPic().equals(bgPicture[0])) {
@@ -405,11 +404,11 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
fromNick = intent.getStringExtra("fromNick");
fromUid = intent.getStringExtra("fromUid");
giftId = intent.getIntExtra("giftId", 0);
mRoomInfo = intent.getParcelableExtra(Constants.ROOM_INFO);
mRoomInfo = intent.getParcelableExtra(CoreConstants.ROOM_INFO);
if (mRoomInfo != null) {
roomUid = mRoomInfo.getRoomUid();
} else {
roomUid = intent.getLongExtra(Constants.ROOM_UID, 0);
roomUid = intent.getLongExtra(CoreConstants.ROOM_UID, 0);
}
}
@@ -549,7 +548,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
}
break;
case RoomEvent.MONSTER_STATUS_CHANGED:
MonsterProtocol.DataBean dataBean = roomEvent.getMonsterStatusAttachment().getDataBean();
MonsterProtocolDataBean dataBean = roomEvent.getMonsterStatusAttachment().getDataBean();
Log.e(TAG, "onRoomEventReceive: monster status changed: " + dataBean);
RoomInfo myRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
// 当前为房间页面并且当前房间为怪兽出现房间时才出现通知
@@ -597,7 +596,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
// 当前为房间页面并且当前房间为怪兽出现房间时才出现通知
if (UIUtils.isTopActivity(AVRoomActivity.this) && currentRoomInfo != null &&
currentRoomInfo.getUid() == monsterHuntingResult.getMonster().getAppearRoomUid()) {
MonsterProtocol.DataBean monsterInfo = monsterHuntingResult.getMonster();
MonsterProtocolDataBean monsterInfo = monsterHuntingResult.getMonster();
if (monsterDialog != null && monsterDialog.isShowing()) {
monsterDialog.dismiss();
}
@@ -915,7 +914,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
}
dismissLoadingDialog();
} catch (Exception e) {
CrashReport.postCatchedException(e);
StatisticManager.Instance().logException(e);
}
EventBus.getDefault().unregister(this);
super.onDestroy();
@@ -1196,14 +1195,14 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
giftList = new LinkedList<>();
}
int second2 = baseProtocol.getSecond();
AllServiceGiftProtocol.DataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocol.DataBean.class);
AllServiceGiftProtocolDataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocolDataBean.class);
if (data == null || data.getGiftUrl() == null || data.isCeremonyGift())
return;
giftList.add(data);
if (second2 == CUSTOM_MSG_ALL_SERVICE_GIFT) {
if (giftDialog != null && giftDialog.isShowing()) {
// 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个
AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
AllServiceGiftProtocolDataBean dataBean = giftList.peekFirst();
if (dataBean != null) {
return;
} else {
@@ -1241,7 +1240,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
giftDialog = generateAllServiceGiftDialog(this, giftList.peekFirst());
giftDialog.setOnDismissListener(dialog -> {
giftList.pollFirst();
AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
AllServiceGiftProtocolDataBean dataBean = giftList.peekFirst();
if (dataBean != null) {
if (isValid()) {
showGiftDialog();
@@ -1253,7 +1252,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
giftDialog.show();
}
private AllServiceGiftDialog generateAllServiceGiftDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
private AllServiceGiftDialog generateAllServiceGiftDialog(Context context, AllServiceGiftProtocolDataBean dataBean) {
switch (JavaUtil.str2int(dataBean.getLevelNum())) {
default:
case AllServiceGiftDialog.ALL_SERVICE_GIFT_LEVEL_1:

View File

@@ -21,7 +21,7 @@ import com.nnbc123.core.noble.NobleResourceType;
import com.nnbc123.core.user.bean.UserInfo;
import com.nnbc123.library.base.factory.CreatePresenter;
import com.nnbc123.library.utils.ListUtils;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.room.bean.OnlineChatMember;
import com.nnbc123.library.utils.SingleToastUtil;
@@ -41,13 +41,13 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
private SmartRefreshLayout mRefreshLayout;
private RecyclerView mRecyclerView;
private int mPage = Constants.PAGE_START;
private int mPage = CoreConstants.PAGE_START;
private int micPosition;
private boolean onlyManager;
public static void openActivity(FragmentActivity fragmentActivity, int micPosition,boolean onlyManager) {
Intent intent = new Intent(fragmentActivity, RoomInviteActivity.class);
intent.putExtra(Constants.KEY_POSITION, micPosition);
intent.putExtra(CoreConstants.KEY_POSITION, micPosition);
intent.putExtra("only_manager", onlyManager);
fragmentActivity.startActivityForResult(intent, 200);
}
@@ -62,7 +62,7 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
initWhiteTitleBar(onlyManager ? "在线房主/管理员" : getString(R.string.title_online));
Intent intent = getIntent();
if (intent != null)
micPosition = intent.getIntExtra(Constants.KEY_POSITION, Integer.MIN_VALUE);
micPosition = intent.getIntExtra(CoreConstants.KEY_POSITION, Integer.MIN_VALUE);
mRoomInviteAdapter = new RoomInviteAdapter(this, this);
mRecyclerView.setAdapter(mRoomInviteAdapter);
@@ -96,7 +96,7 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
}
public void firstLoad() {
mPage = Constants.PAGE_START;
mPage = CoreConstants.PAGE_START;
loadData(0);
}
@@ -112,7 +112,7 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
@Override
public void onRequestChatMemberByPageFail(String errorStr, int page) {
mPage = page;
if (mPage == Constants.PAGE_START) {
if (mPage == CoreConstants.PAGE_START) {
mRefreshLayout.finishRefresh(0);
showNoData(getString(R.string.data_error));
} else {
@@ -128,7 +128,7 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
@Override
public void onRequestMemberByPageSuccess(List<ChatRoomMember> memberList, int page) {
mPage = page;
if (mPage == Constants.PAGE_START) {
if (mPage == CoreConstants.PAGE_START) {
List<ChatRoomMember> chatRoomMemberList = mRoomInviteAdapter.getChatRoomMemberList();
if (!ListUtils.isListEmpty(chatRoomMemberList))
chatRoomMemberList.clear();
@@ -174,7 +174,7 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
intent.putExtra("account", chatRoomMember.getAccount());
String nick = chatRoomMember.getNick();
intent.putExtra("nick", nick == null ? "" : nick);
intent.putExtra(Constants.KEY_POSITION, micPosition);
intent.putExtra(CoreConstants.KEY_POSITION, micPosition);
setResult(100, intent);
finish();
}

View File

@@ -17,7 +17,8 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.coorchice.library.SuperTextView;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nim.uikit.common.util.string.NimStringUtil;
import com.nnbc123.core.utils.ktx.StringExtensionKt;
import com.opensource.svgaplayer.SVGAImageView;
import com.nnbc123.app.R;
import com.nnbc123.app.common.widget.CircleImageView;
@@ -39,7 +40,6 @@ import com.nnbc123.core.room.pk.bean.PKTeamInfo;
import com.nnbc123.core.room.queue.bean.MicMemberInfo;
import com.nnbc123.core.user.UserModel;
import com.nnbc123.core.utils.ActivityUtil;
import com.nnbc123.core.utils.StringExtensionKt;
import com.nnbc123.library.utils.config.BasicConfig;
/**
@@ -286,7 +286,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
}
protected void setSelectText(int index, String nick, int gender) {
tvNick.setText(StringExtensionKt.subAndReplaceDot(StringUtil.removeBlanks(nick), 7));
tvNick.setText(StringExtensionKt.subAndReplaceDot(NimStringUtil.removeBlanks(nick), 7));
tvNick.setTextColor(context.getResources().getColor(R.color.white));
if (tvNumber != null) {

View File

@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.load
import com.nnbc123.app.utils.UserUtils
import com.nnbc123.core.Constants
import com.nnbc123.core.CoreConstants
import com.nnbc123.core.bean.RoomQueueInfo
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.bean.RoomInfo
@@ -74,7 +74,7 @@ class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context)
super.bind(info, position)
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo ?: return
val roomMicInfo = info.mRoomMicInfo
val manMicro = Constants.maleIndex.contains(position)
val manMicro = CoreConstants.maleIndex.contains(position)
val uid = UserUtils.getUserUid()
if (roomMicInfo != null) {
viewGenderBg.setBackgroundResource(if (manMicro) R.drawable.shape_circle_micro_man_bg else R.drawable.shape_circle_micro_woman_bg)

View File

@@ -5,7 +5,7 @@ import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.home.bean.HomeRoomInfo
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
class ExitRoomAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_exit_room) {

View File

@@ -28,16 +28,6 @@ public class InviteFriendListAdapter extends BaseQuickAdapter<PublicChatHallFrie
this.context = context;
}
private OnItemClickListener onItemClickListener;
public interface OnItemClickListener {
void sendListener(UserInfo attentionInfo);
}
public void setRylListener(OnItemClickListener onClickListener) {
onItemClickListener = onClickListener;
}
@Override
protected void convert(BaseViewHolder helper, PublicChatHallFriendInfo pchFriendInfo) {
if (pchFriendInfo == null) return;

View File

@@ -16,7 +16,7 @@ import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.bean.RoomQueueInfo
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.praise.PraiseModel
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.library.utils.config.BasicConfig

View File

@@ -8,7 +8,7 @@ import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.nnbc123.app.R;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.bean.RoomQueueInfo;
import com.nnbc123.core.manager.AvRoomDataManager;
@@ -78,7 +78,7 @@ public class UpMicAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
textView.setText(AvRoomDataManager.get().isDatingMode() ? "主持位" : "房主位");
} else {
if (AvRoomDataManager.get().isDatingMode()) {
textView.setText(position + (Constants.maleIndex.contains(position - 1) ? "号男神位" : "号女神位"));
textView.setText(position + (CoreConstants.maleIndex.contains(position - 1) ? "号男神位" : "号女神位"));
} else {
textView.setText(String.format(context.getResources().getString(R.string.which_mic_position), position));
}

View File

@@ -26,7 +26,7 @@ import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.ShowGiftDialogEvent
import com.nnbc123.core.room.anotherroompk.ShowUserInfoDialogEvent
import com.nnbc123.core.utils.CurrentTimeUtils
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import com.nnbc123.library.rxbus.RxBus
import com.nnbc123.library.utils.CommonUtils
import io.reactivex.Observable

View File

@@ -15,10 +15,10 @@ import com.nnbc123.core.auth.AuthModel
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.RoomPKModel
import com.nnbc123.core.room.anotherroompk.SimpleRoomInfo
import com.nnbc123.core.utils.ifNotNullOrEmpty
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.toIntOrDef
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.ifNotNullOrEmpty
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import com.nnbc123.core.utils.ktx.toIntOrDef
import com.nnbc123.core.utils.ktx.toast
class RoomPKCreateActivity : BaseViewBindingActivity<ActivityRoomPkCreateBinding>() {

View File

@@ -16,7 +16,7 @@ import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.RoomPKModel
import com.nnbc123.core.room.anotherroompk.SimpleRoomInfo
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
class RoomPKSearchActivity : BaseViewBindingActivity<ActivityRoomPkSearchBinding>() {

View File

@@ -5,7 +5,7 @@ import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.room.anotherroompk.SimpleRoomInfo
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
class RoomPKSearchAdapter :
BaseQuickAdapter<SimpleRoomInfo, BaseViewHolder>(R.layout.item_room_pk_search) {

View File

@@ -9,7 +9,7 @@ import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogRoomPkFinishBinding
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.im.custom.bean.RoomPkBean
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {

View File

@@ -8,7 +8,7 @@ import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogRoomPkForceFinishBinding
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.im.custom.bean.RoomPkBean
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
class RoomPkForceFinishDialog : BaseDialog<DialogRoomPkForceFinishBinding>() {

View File

@@ -8,9 +8,9 @@ import com.nnbc123.app.databinding.DialogRoomPkReceivedBinding
import com.nnbc123.core.im.custom.bean.RoomPkBean
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.RoomPKModel
import com.nnbc123.core.utils.ifNotNullOrEmpty
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.ifNotNullOrEmpty
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import com.nnbc123.core.utils.ktx.toast
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable

View File

@@ -16,11 +16,11 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.chuhai.utils.PathUtils
import com.chu.utils.PathUtils
import com.hjq.toast.ToastUtils
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nim.uikit.support.glide.GlideApp
import com.nnbc123.app.ErbanTakePhotoActivity.TakePhotoCallBack
import com.nnbc123.app.takephoto.app.ErbanTakePhotoActivity.TakePhotoCallBack
import com.nnbc123.app.R
import com.nnbc123.app.application.XChatApplication
import com.nnbc123.app.avroom.PrivilegeViewModel
@@ -34,8 +34,8 @@ import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.core.file.FileModel
import com.nnbc123.core.privilege.bean.PrivilegeCardInfo
import com.nnbc123.core.utils.Logger
import com.nnbc123.core.utils.TextUtils
import com.nnbc123.core.utils.CLogger
import com.nnbc123.core.utils.CTextUtils
import com.nnbc123.library.common.file.FileHelper
import com.nnbc123.library.common.photo.PhotoProviderNew
import com.nnbc123.library.common.support.PathHelper
@@ -268,9 +268,9 @@ class CreatePrivilegeCardDialog : BaseDialog<DialogCreatePrivilegeCardBinding>()
}
private fun checkEmpty(): Boolean {
return (TextUtils.isEmptyText(binding.edName.text.toString()) || TextUtils.isEmptyText(
return (CTextUtils.isEmptyText(binding.edName.text.toString()) || CTextUtils.isEmptyText(
binding.edUseNumber.text.toString()
) || TextUtils.isEmptyText(binding.edValid.text.toString()) || TextUtils.isEmptyText(binding.edId.text.toString()) || TextUtils.isEmptyText(
) || CTextUtils.isEmptyText(binding.edValid.text.toString()) || CTextUtils.isEmptyText(binding.edId.text.toString()) || CTextUtils.isEmptyText(
mUrl
))
}
@@ -330,7 +330,7 @@ class CreatePrivilegeCardDialog : BaseDialog<DialogCreatePrivilegeCardBinding>()
}
if (sourceSize > 0) {
//不能上传图片的最小文件大小
Logger.debug(TAG, "sourceSize: $sourceSize")
CLogger.debug(TAG, "sourceSize: $sourceSize")
if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
ToastUtils.show(R.string.text_bitmap_too_small)
return
@@ -438,7 +438,7 @@ class CreatePrivilegeCardDialog : BaseDialog<DialogCreatePrivilegeCardBinding>()
val outPath = getImageTempPath(path)
lifecycleScope.launch {
Log.d(TAG, "uploadVideo 开始保存封面 outPath:${outPath}")
val saveResult = com.chuhai.utils.ImageUtils.save(
val saveResult = com.chu.utils.ImageUtils.save(
resource,
outPath,
Bitmap.CompressFormat.JPEG, false

View File

@@ -15,7 +15,7 @@ import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.core.room.bean.RoomInfo
import com.nnbc123.core.room.game.GameInfo
import com.nnbc123.core.room.game.GameModel
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
class CreateRoomDialog : BaseDialog<DialogCreateRoomBinding>() {

View File

@@ -19,14 +19,14 @@ import com.nnbc123.core.room.model.AvRoomModel
import com.nnbc123.core.statistic.StatisticManager
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
import com.nnbc123.app.R
import com.nnbc123.app.UIHelper
import com.nnbc123.app.utils.UIHelper
import com.nnbc123.app.avroom.activity.AVRoomActivity
import com.nnbc123.app.avroom.adapter.ExitRoomAdapter
import com.nnbc123.app.avroom.presenter.HomePartyPresenter
import com.nnbc123.app.common.widget.dialog.DialogManager.LambdaOkDialogListener
import com.nnbc123.app.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.xchat_android_constants.XChatConstants
import com.nnbc123.core.XChatConstants
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus

View File

@@ -28,7 +28,7 @@ import com.nnbc123.app.home.helper.LoadPageDataHelper;
import com.nnbc123.app.ui.widget.dialog.BaseDialog;
import com.nnbc123.app.ui.widget.marqueeview.Utils;
import com.nnbc123.app.ui.widget.recyclerview.decoration.ColorDecoration;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.bean.RoomQueueInfo;
import com.nnbc123.core.manager.AvRoomDataManager;
@@ -192,9 +192,9 @@ public class MicQueueDialog extends BaseDialog implements
if (key == -1) continue;
//相亲模式只能抱上对应的坑位
if (AvRoomDataManager.get().isDatingMode()) {
if (member.getGroupType() == GroupType.MALE && !Constants.maleIndex.contains(key))
if (member.getGroupType() == GroupType.MALE && !CoreConstants.maleIndex.contains(key))
continue;
if (member.getGroupType() == GroupType.FEMALE && Constants.maleIndex.contains(key))
if (member.getGroupType() == GroupType.FEMALE && CoreConstants.maleIndex.contains(key))
continue;
}
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().mMicQueueMemberMap.get(key);
@@ -425,7 +425,7 @@ public class MicQueueDialog extends BaseDialog implements
public Single<List<QueuingMicMemeberInfo>> loadData(int curPage) {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
return MicQueueModel.get().loadMicQueueList(roomInfo.getUid(), curPage, Constants.PAGE_SIZE)
return MicQueueModel.get().loadMicQueueList(roomInfo.getUid(), curPage, CoreConstants.PAGE_SIZE)
.flatMap(info -> {
queueMicListInfo = info;
AvRoomDataManager.get().myIsInQueue = info.getMyPos() >= 0;
@@ -470,7 +470,7 @@ public class MicQueueDialog extends BaseDialog implements
} else {
showNoDataLayout();
}
loadPageDataHelper.setCurPage(Constants.PAGE_START + 1);
loadPageDataHelper.setCurPage(CoreConstants.PAGE_START + 1);
}
public void removeQueueMember(String account) {

View File

@@ -26,7 +26,7 @@ import com.nnbc123.app.ui.widget.dialog.BaseDialog;
import com.nnbc123.app.ui.widget.dialog.CommonLoadingDialog;
import com.nnbc123.app.ui.widget.marqueeview.Utils;
import com.nnbc123.app.ui.widget.recyclerview.decoration.ColorDecoration;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.bean.RoomQueueInfo;
import com.nnbc123.core.manager.AvRoomDataManager;
@@ -215,7 +215,7 @@ public class PKMicQueueDialog extends BaseDialog implements
if (roomInfo != null) {
return PkModel.get().loadPKMicQueueList(
curPage,
Constants.PAGE_SIZE
CoreConstants.PAGE_SIZE
)
.flatMap(info -> {
queueMicListInfo = info;
@@ -304,7 +304,7 @@ public class PKMicQueueDialog extends BaseDialog implements
} else {
showNoDataLayout();
}
loadPageDataHelper.setCurPage(Constants.PAGE_START + 1);
loadPageDataHelper.setCurPage(CoreConstants.PAGE_START + 1);
}

View File

@@ -16,7 +16,7 @@ import com.nnbc123.app.utils.SpannableBuilder
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.bean.BroadcastInfo
import com.nnbc123.core.room.model.AvRoomModel
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.library.utils.CommonUtils
import com.nnbc123.library.utils.TextWatcherWrapper
import io.reactivex.Observable

View File

@@ -8,52 +8,56 @@ import android.graphics.drawable.ColorDrawable
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.style.ForegroundColorSpan
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import android.widget.PopupWindow
import android.widget.TextView
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.BillingResult
import com.android.billingclient.api.ProductDetails
import com.android.billingclient.api.Purchase
import com.google.android.flexbox.AlignItems
import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.nnbc123.core.UriProvider
import com.nnbc123.core.auth.AuthModel
import com.nnbc123.core.pay.PayModel
import com.nnbc123.core.pay.PaymentActivity
import com.nnbc123.core.pay.bean.FirstChargeGoods
import com.nnbc123.core.pay.bean.FirstChargeReward
import com.nnbc123.core.pay.bean.PaymentResult
import com.nnbc123.core.pay.event.FirstChargeEvent
import com.nnbc123.core.pay.model.unionpay.UnionPayModel
import com.nnbc123.core.statistic.StatisticManager
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.app.R
import com.nnbc123.app.bank_card.activity.AddBankCardAgreementActivity
import com.nnbc123.app.base.BaseViewBindingActivity
import com.nnbc123.app.common.widget.dialog.DialogManager.AbsOkDialogListener
import com.nnbc123.app.databinding.DialogFirstChargeBinding
import com.nnbc123.app.ui.setting.ModifyPwdActivity
import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.app.ui.webview.CommonWebViewActivity
import com.nnbc123.library.annatation.ActLayoutRes
import com.nnbc123.library.utils.JavaUtil
import com.nnbc123.library.utils.SingleToastUtil
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.nnbc123.app.ui.pay.BillingManager
import com.nnbc123.core.pay.bean.PayRecordId
import com.nnbc123.core.utils.net.IgnoreException
import com.nnbc123.library.common.Constants
import com.nnbc123.library.utils.AppMetaDataUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
@ActLayoutRes(R.layout.dialog_first_charge)
class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>() {
class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>(),
BillingManager.BillingUpdatesListener {
private val TAG = "FirstChargeDialog"
private var goodsList: List<FirstChargeGoods>? = null
private var currGoods: FirstChargeGoods? = null
private lateinit var rewardAdapter: RewardAdapter
private lateinit var rvDelegate: RVDelegate<FirstChargeReward>
private lateinit var helpPopupWindow: PopupWindow
private var billingManager: BillingManager? = null
companion object {
@JvmStatic
@@ -99,8 +103,7 @@ class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>() {
binding.ivHelp.setOnClickListener { showHelpPopup() }
binding.tvCharge.setOnClickListener {
currGoods?.let {
SelectPayTypeDialog.newInstance(it.chargeProdId, "¥${it.chargeMoney}")
.show(this)
buyProduct(it.productDetails)
} ?: run {
"请选择充值产品!".toast()
}
@@ -147,19 +150,24 @@ class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>() {
1 -> {
binding.rbPlanB.visibility = View.GONE
binding.rbPlanC.visibility = View.GONE
binding.rbPlanA.text = "${goodsList[0].chargeMoney}"
binding.rbPlanA.text = "$${goodsList[0].chargeMoney}"
}
2 -> {
binding.rbPlanC.visibility = View.GONE
binding.rbPlanA.text = "${goodsList[0].chargeMoney}"
binding.rbPlanB.text = "${goodsList[1].chargeMoney}"
binding.rbPlanA.text = "$${goodsList[0].chargeMoney}"
binding.rbPlanB.text = "$${goodsList[1].chargeMoney}"
}
3 -> {
binding.rbPlanA.text = "${goodsList[0].chargeMoney}"
binding.rbPlanB.text = "${goodsList[1].chargeMoney}"
binding.rbPlanC.text = "${goodsList[2].chargeMoney}"
binding.rbPlanA.text = "$${goodsList[0].chargeMoney}"
binding.rbPlanB.text = "$${goodsList[1].chargeMoney}"
binding.rbPlanC.text = "$${goodsList[2].chargeMoney}"
}
}
if (AppMetaDataUtil.getChannelID().equals(Constants.CHANNEL_GOOGLE)) {
initBilling()
}
}
private fun updateCurrGoods(firstChargeGoods: FirstChargeGoods?) {
@@ -217,43 +225,6 @@ class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>() {
if (resultCode != RESULT_OK) {
return
}
//支付页面返回处理
if (requestCode == PaymentActivity.REQUEST_CODE_PAY) {
if (data != null && data.extras != null) {
val paymentResult: PaymentResult? =
data.getParcelableExtra(PaymentActivity.KEY_PAY_RESULT)
if (paymentResult != null) {
// 充值金额超过限定时,就必须先实名认证
when (JavaUtil.str2int(paymentResult.code)) {
PayModel.NOT_REAL_NAME_BEFORE_CHARGING -> dialogManager.showTipsDialog(
getString(R.string.tips_need_to_certification),
getString(R.string.go_to_certification),
object : AbsOkDialogListener() {
override fun onOk() {
// 跳去实名认证页面
CommonWebViewActivity.start(
this@FirstChargeDialog,
UriProvider.getTutuRealNamePage()
)
}
})
UnionPayModel.CODE_NEED_BIND_BANK_CARD_FIRST -> dialogManager.showTipsDialog(
getString(R.string.tips_need_bind_bank_card_first),
object : AbsOkDialogListener() {
override fun onOk() {
// 跳去添加银行卡页面
AddBankCardAgreementActivity.start(this@FirstChargeDialog)
}
})
else -> {
toast(paymentResult.msg)
//重新获取钱包信息
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
}
}
}
}
}
if (requestCode == BIND_CODE_GOLD) {
ModifyPwdActivity.start(this, ModifyPwdActivity.FOGERT_PAY_PWD)
}
@@ -264,9 +235,114 @@ class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>() {
finish()
}
override fun onResume() {
super.onResume()
if (billingManager?.isServiceConnected == true) {
billingManager?.onQueryPurchases()
}
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
billingManager?.destroy()
}
private fun initBilling() {
billingManager = BillingManager(this, this)
}
@SuppressLint("CheckResult")
override fun onBillingClientSetupFinished() {
Log.i(TAG, "onBillingClientSetupFinished")
goodsList?.let { initProduceList(it) }
}
private fun initProduceList(goodsList: List<FirstChargeGoods>) {
val productKeys: MutableList<String> = ArrayList()
for (bean in goodsList) {
productKeys.add(bean.chargeProdId)
}
billingManager?.querySkuDetailsAsync(productKeys) { billingResult: BillingResult, productDetails: MutableList<ProductDetails> ->
if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {
Log.w(
TAG,
"Unsuccessful query for type: " + BillingClient.ProductType.INAPP + ". Error code: " + billingResult.responseCode
)
return@querySkuDetailsAsync
}
if (productDetails.isNotEmpty()) {
for (chargeBean in goodsList) {
for (skuDetails in productDetails) {
if (skuDetails.productId == chargeBean.chargeProdId) {
chargeBean.productDetails = skuDetails
break
}
}
}
}
}
}
/*商品更新回调*/
@SuppressLint("CheckResult")
override fun onPurchasesUpdated(purchases: List<Purchase>) {
for (purchase in purchases) {
if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED &&
purchase.accountIdentifiers != null
) {
PayModel.get().verifyOrder(
purchase.accountIdentifiers!!.obfuscatedAccountId,
purchase.products[0],
purchase.packageName,
purchase.purchaseToken
)
.compose(bindToLifecycle())
.subscribe(
{ token: String? ->
//L.i("token=" + token);
billingManager?.consumeAsync(token)
}
) { throwable: Throwable ->
if (throwable !is IgnoreException) {
SingleToastUtil.showToast(throwable.message)
}
}
}
}
Log.i(TAG, "onPurchasesUpdated")
}
override fun onConsumeFinished(token: String?, result: Int) {
}
override fun onFailedHandle(result: Int) {
}
/*购买商品*/
@SuppressLint("CheckResult")
fun buyProduct(skuDetails: ProductDetails?) {
if (skuDetails != null) {
Log.d(TAG, "BuyProduct:" + skuDetails.productId)
PayModel.get().placeOrder(skuDetails.productId)
.compose(bindToLifecycle())
.subscribe(
{ recordId: PayRecordId ->
billingManager?.initiatePurchaseFlow(
skuDetails,
recordId.recordId
)
}
) { throwable: Throwable ->
SingleToastUtil.showToast(
throwable.message
)
}
} else {
Log.w(TAG, "skuDetails ==null")
}
}
}

View File

@@ -7,7 +7,7 @@ import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.app.R
import com.nnbc123.core.pay.bean.FirstChargeReward
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.utils.TextUtils
import com.nnbc123.core.utils.CTextUtils
class RewardAdapter(private val itemWidth: Int) :
BaseQuickAdapter<FirstChargeReward, BaseViewHolder>(R.layout.item_first_charge_reward) {
@@ -23,6 +23,6 @@ class RewardAdapter(private val itemWidth: Int) :
)
helper.setText(R.id.tv_name, item.showText)
.setText(R.id.tv_time, item.showTime)
.setGone(R.id.tv_time, !TextUtils.isEmptyText(item.showTime))
.setGone(R.id.tv_time, !CTextUtils.isEmptyText(item.showTime))
}
}

View File

@@ -9,14 +9,11 @@ import android.view.View
import android.view.WindowManager
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible
import com.nnbc123.core.Constants
import com.nnbc123.core.pay.PayModel
import com.nnbc123.core.pay.PaymentActivity
import com.nnbc123.core.pay.bean.WalletInfo
import com.nnbc123.app.R
import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogSelectPayTypeBinding
import com.nnbc123.app.ui.pay.ChargeActivity
import com.nnbc123.app.utils.SpannableBuilder
import com.nnbc123.library.annatation.ActLayoutRes
import com.nnbc123.library.utils.FormatUtils
@@ -29,7 +26,6 @@ import com.netease.nim.uikit.common.util.sys.ScreenUtil
@ActLayoutRes(R.layout.dialog_select_pay_type)
class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
private val chargeProdId by lazy { requireArguments().getString("chargeProdId", "") }
private val descText by lazy { requireArguments().getString("descText", "") }
private val money by lazy { requireArguments().getInt("money", 0) }
private val showDiamondCharge by lazy {
@@ -38,22 +34,21 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
false
)
}
private var removeView: View? = null
private var onDiamondChargeClick: (() -> Unit)? = null
private var onGoogleChargeClick: (() -> Unit)? = null
companion object {
@JvmStatic
fun newInstance(
chargeProdId: String,
descText: String,
showDiamondCharge: Boolean = false,
money: Int = 0
): SelectPayTypeDialog {
return SelectPayTypeDialog().apply {
arguments = Bundle().apply {
putString("chargeProdId", chargeProdId)
putString("descText", descText)
putBoolean("showDiamondCharge", showDiamondCharge)
putInt("money", money)
@@ -62,12 +57,14 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
}
}
private var payChannel = ""
fun setOnDiamondChargeClick(onDiamondChargeClick: (() -> Unit)) {
this.onDiamondChargeClick = onDiamondChargeClick
}
fun setOnGoogleChargeClick(onGoogleChargeClick: (() -> Unit)) {
this.onGoogleChargeClick = onGoogleChargeClick
}
override fun onStart() {
width = WindowManager.LayoutParams.MATCH_PARENT
gravity = Gravity.BOTTOM
@@ -85,24 +82,12 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
it.printStackTrace()
})
binding.tvConfirm.setOnClickListener {
if (payChannel.isEmpty()) {
SingleToastUtil.showToast("数据初始化中,请稍后~")
return@setOnClickListener
}
if (binding.rbAlipay.isChecked) {
PaymentActivity.start(requireActivity(), Constants.CHARGE_ALIPAY, chargeProdId)
} else if (binding.rbDiamond.isChecked) {
if (binding.rbDiamond.isChecked) {
onDiamondChargeClick?.invoke()
} else {
PaymentActivity.start(requireActivity(), Constants.CHARGE_WX, chargeProdId)
}
dismissAllowingStateLoss()
}
binding.tvMore.setOnClickListener {
removeView?.let {
binding.rg.addView(it)
binding.tvMore.visibility = View.GONE
dismissAllowingStateLoss()
} else if (binding.rbGoogle.isChecked) {
onGoogleChargeClick?.invoke()
dismissAllowingStateLoss()
}
}
@@ -113,7 +98,7 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
if (showDiamondCharge) {
binding.rg.setOnCheckedChangeListener { _, _ ->
if (binding.rbDiamond.isChecked) {
binding.tvDesc.text = "${money * 10}钻石"
binding.tvDesc.text = "${money * 1000}钻石"
} else {
binding.tvDesc.text = descText
}
@@ -123,9 +108,6 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
}
}
/**
* defaultPay 1默认支付宝2默认微信
*/
private fun setWalletData(walletInfo: WalletInfo) {
binding.rg.visibility = View.VISIBLE
var defaultDiamond = false
@@ -146,36 +128,11 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
)
)
.build()
defaultDiamond = money != 0 && money * 10 <= walletInfo.diamondNum
defaultDiamond = money != 0 && money * 1000 <= walletInfo.diamondNum
binding.rbDiamond.isChecked = defaultDiamond
} else {
binding.rbDiamond.isVisible = false
}
when (walletInfo.defaultPay) {
ChargeActivity.ALI_PAY_CLOSE -> {
payChannel = Constants.CHARGE_ALIPAY
removeView = binding.rbAlipay
binding.rg.removeView(binding.rbAlipay)
binding.rbWechat.isChecked = !defaultDiamond
binding.tvMore.visibility = View.VISIBLE
}
ChargeActivity.WX_PAY_CLOSE -> {
payChannel = Constants.CHARGE_WX
removeView = binding.rbWechat
binding.rg.removeView(binding.rbWechat)
binding.rbAlipay.isChecked = !defaultDiamond
binding.tvMore.visibility = View.VISIBLE
}
ChargeActivity.WX_PAY_OPEN -> {
payChannel = Constants.CHARGE_WX
binding.rbWechat.isChecked = !defaultDiamond
binding.rg.removeView(binding.rbAlipay)
binding.rg.addView(binding.rbAlipay)
}
else -> {
payChannel = Constants.CHARGE_ALIPAY
binding.rbAlipay.isChecked = !defaultDiamond
}
}
binding.rbGoogle.isChecked = !defaultDiamond
}
}

View File

@@ -27,7 +27,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.core.Constants
import com.nnbc123.core.CoreConstants
import com.nnbc123.core.DemoCache
import com.nnbc123.core.auth.AuthModel
import com.nnbc123.core.bean.RoomMicInfo
@@ -92,7 +92,6 @@ import com.nnbc123.app.music.widget.MusicPlayerView
import com.nnbc123.app.room_chat.activity.RoomMsgActivity
import com.nnbc123.app.treasure_box.widget.GoldBoxHelper
import com.nnbc123.app.ui.utils.load
import com.nnbc123.app.ui.utils.loadAvatar
import com.nnbc123.app.ui.webview.DialogWebViewActivity
import com.nnbc123.app.ui.widget.ButtonItem
import com.nnbc123.app.ui.widget.GiftDialog
@@ -107,7 +106,7 @@ import com.nnbc123.app.ui.widget.rollviewpager.adapter.StaticPagerAdapter
import com.nnbc123.app.ui.widget.rollviewpager.hintview.ColorPointHintView
import com.nnbc123.app.utils.KeyBoardUtils
import com.nnbc123.app.utils.SpannableBuilder
import com.nnbc123.xchat_android_constants.XChatConstants
import com.nnbc123.core.XChatConstants
import com.nnbc123.library.net.rxnet.utils.RxNetWorkUtils
import com.nnbc123.library.rxbus.RxBus
import com.nnbc123.library.utils.*
@@ -455,7 +454,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 释放公屏和麦上的所有信息信息和动画
val roomUid = intent.getLongExtra(Constants.ROOM_UID, 0)
val roomUid = intent.getLongExtra(CoreConstants.ROOM_UID, 0)
if (roomUid != 0L && roomUid != AvRoomDataManager.get().mCurrentRoomInfo?.uid) {
releaseView()
}
@@ -1077,7 +1076,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
showToast(getString(R.string.tips_close_leave_mode_first))
return
}
val micPosition = data.extras?.getInt(Constants.KEY_POSITION, Int.MIN_VALUE)
val micPosition = data.extras?.getInt(CoreConstants.KEY_POSITION, Int.MIN_VALUE)
if (micPosition == Int.MIN_VALUE) return
//抱人上麦
@@ -1385,7 +1384,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
.subscribe { aBoolean: Boolean ->
if (aBoolean) {
AudioEngineManager.get().isMute = !AudioEngineManager.get().isMute
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
AudioEngineManager.get().setRole(CoreConstants.CLIENT_ROLE_BROADCASTER)
updateMicBtn()
} else {
toast("开启权限后才能开麦")
@@ -1401,7 +1400,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
"关闭麦克风"
)
} else if (AvRoomDataManager.get().isOnMic(myUid)) {
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
AudioEngineManager.get().setRole(CoreConstants.CLIENT_ROLE_BROADCASTER)
}
}
}

View File

@@ -8,7 +8,7 @@ import com.nnbc123.core.room.bean.RoomInfo
import com.nnbc123.core.room.event.SwitchRoomEvent
import com.nnbc123.core.room.model.AvRoomModel
import com.nnbc123.core.utils.CurrentTimeUtils
import com.nnbc123.core.utils.StringUtils
import com.nnbc123.core.utils.CStringUtils
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -64,7 +64,7 @@ class FakeSingleRoomBackFragment : BaseViewBindingFragment<FragmentFakeSingleRoo
jumpRoom(it)
} else {
preRoomInfo = it
if (!StringUtils.isBlank(it.backPic)) {
if (!CStringUtils.isBlank(it.backPic)) {
AVRoomActivity.setBackBg(mContext, it, binding.svgaImageViewBg, bgPicture)
}
}

View File

@@ -9,7 +9,7 @@ import com.nnbc123.core.room.bean.RoomInfo
import com.nnbc123.core.room.event.SwitchRoomEvent
import com.nnbc123.core.room.model.AvRoomModel
import com.nnbc123.core.utils.CurrentTimeUtils
import com.nnbc123.core.utils.StringUtils
import com.nnbc123.core.utils.CStringUtils
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView
import com.opensource.svgaplayer.SVGAParser
@@ -55,7 +55,7 @@ class FakeSingleRoomFragment : BaseViewBindingFragment<FragmentFakeSingleRoomBin
jumpRoom(it)
} else {
preRoomInfo = it
if (!StringUtils.isBlank(it.backPic)) {
if (!CStringUtils.isBlank(it.backPic)) {
AVRoomActivity.setBackBg(mContext, it, binding.svgaImageViewBg, bgPicture)
}
}

View File

@@ -6,7 +6,6 @@ import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.view.ViewConfiguration
import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
@@ -15,7 +14,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import cn.sharesdk.framework.Platform
import com.chad.library.adapter.base.BaseQuickAdapter
import com.gyf.immersionbar.ImmersionBar
import com.netease.nim.uikit.common.util.string.StringUtil
import com.netease.nim.uikit.common.util.string.NimStringUtil
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment
@@ -71,7 +70,6 @@ import com.nnbc123.core.utils.net.RxHelper
import com.nnbc123.library.rxbus.RxBus
import com.nnbc123.library.utils.FormatUtils
import com.nnbc123.library.utils.JavaUtil
import com.nnbc123.library.utils.ResUtil
import com.nnbc123.library.utils.SingleToastUtil
import com.trello.rxlifecycle3.android.FragmentEvent
import io.reactivex.SingleObserver
@@ -135,7 +133,7 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
*/
private fun setupRoomTitleMarquee() {
try {
val configuration = ViewConfiguration.get(context)
val configuration = ViewConfiguration.get(requireContext())
val claz: Class<*> = configuration.javaClass
val field = claz.getDeclaredField("mFadingMarqueeEnabled")
field.isAccessible = true
@@ -362,7 +360,7 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
binding.roomInfo = it
updateHasAnimationEffect()
binding.roomTitle.text = RegexUtil.getPrintableString(it.getTitle())
if (!StringUtil.isEmpty(it.getRoomPwd())) {
if (!NimStringUtil.isEmpty(it.getRoomPwd())) {
binding.roomTitle.setCompoundDrawablesWithIntrinsicBounds(
0, 0, R.drawable.icon_room_lock, 0
)
@@ -411,7 +409,7 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
binding.roomTitle.text = RegexUtil.getPrintableString(currentRoomInfo.getTitle())
}
if (currentRoomInfo != null) {
if (!StringUtil.isEmpty(currentRoomInfo.getRoomPwd())) {
if (!NimStringUtil.isEmpty(currentRoomInfo.getRoomPwd())) {
binding.roomTitle.setCompoundDrawablesWithIntrinsicBounds(
null, null,
resources.getDrawable(R.drawable.icon_room_lock), null

View File

@@ -34,9 +34,8 @@ import com.nnbc123.app.common.widget.dialog.DialogManager;
import com.nnbc123.app.databinding.FragmentAvRoomGameBinding;
import com.nnbc123.app.ui.utils.ImageLoadKt;
import com.nnbc123.app.ui.webview.DatingRuleWebViewActivity;
import com.nnbc123.app.ui.webview.DialogWebViewActivity;
import com.nnbc123.app.utils.UserUtils;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.UriProvider;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.gift.GiftModel;
@@ -674,7 +673,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
FaceInfo info = null;
for (FaceInfo faceInfo : faceInfos) {
if (faceInfo.getId() == Constants.DRAGON_BAR_ID) {
if (faceInfo.getId() == CoreConstants.DRAGON_BAR_ID) {
info = faceInfo;
}
}

View File

@@ -18,7 +18,7 @@ import com.nnbc123.app.avroom.presenter.HomePartyUserListPresenter;
import com.nnbc123.app.avroom.view.IHomePartyUserListView;
import com.nnbc123.app.base.BaseMvpFragment;
import com.nnbc123.app.ui.widget.UserInfoDialog;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.manager.AvRoomDataManager;
import com.nnbc123.core.room.bean.OnlineChatMember;
import com.nnbc123.core.room.bean.RoomInfo;
@@ -43,7 +43,7 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
private SmartRefreshLayout mRefreshLayout;
private OnlineUserAdapter mOnlineUserAdapter;
private int mPage = Constants.PAGE_START;
private int mPage = CoreConstants.PAGE_START;
private boolean isShowToUser = false;
@Override
@@ -105,7 +105,7 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
public void firstLoad() {
mPage = Constants.PAGE_START;
mPage = CoreConstants.PAGE_START;
loadData(0);
}
@@ -128,14 +128,14 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
}
}
mOnlineUserAdapter.setNewData(chatRoomMemberList);
if (mPage == Constants.PAGE_START) {
if (mPage == CoreConstants.PAGE_START) {
mRefreshLayout.finishRefresh();
} else {
mRefreshLayout.finishLoadmore(0);
}
mPage++;
} else {
if (mPage == Constants.PAGE_START) {
if (mPage == CoreConstants.PAGE_START) {
mRefreshLayout.finishRefresh();
} else {
mRefreshLayout.finishLoadmore(0);
@@ -147,7 +147,7 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
public void onRequestChatMemberByPageFail(String errorStr, int page) {
Logger.i("获取到数据失败,page=" + page);
mPage = page;
if (mPage == Constants.PAGE_START) {
if (mPage == CoreConstants.PAGE_START) {
mRefreshLayout.finishRefresh();
} else {
mRefreshLayout.finishLoadmore(0);

View File

@@ -21,7 +21,7 @@ import com.nnbc123.app.databinding.FragmentPrivilegeCardBinding
import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.core.privilege.bean.PrivilegeCardInfo
import com.nnbc123.core.utils.TextUtils
import com.nnbc123.core.utils.CTextUtils
import com.zhihu.matisse.internal.entity.CustomItem
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -173,7 +173,7 @@ class PrivilegeCardFragment : BaseViewBindingFragment<FragmentPrivilegeCardBindi
override fun onResume() {
super.onResume()
if (isNeedLoad && (TextUtils.isEmptyText(type) || type == "0")) {
if (isNeedLoad && (CTextUtils.isEmptyText(type) || type == "0")) {
loadData(true)
isNeedLoad = false
}
@@ -182,7 +182,7 @@ class PrivilegeCardFragment : BaseViewBindingFragment<FragmentPrivilegeCardBindi
@Subscribe(threadMode = ThreadMode.MAIN)
fun privilegeCardEvent(event: PrivilegeCardEvent?) {
isNeedLoad = true
if (isResumed && isNeedLoad && (TextUtils.isEmptyText(type) || type == "0")) {
if (isResumed && isNeedLoad && (CTextUtils.isEmptyText(type) || type == "0")) {
loadData(true)
isNeedLoad = false
}

View File

@@ -20,7 +20,7 @@ import com.nnbc123.app.avroom.view.IRoomCharmRankingListView;
import com.nnbc123.app.base.BaseMvpFragment;
import com.nnbc123.app.ui.widget.GiftDialog;
import com.nnbc123.app.ui.widget.UserInfoDialog;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.manager.AvRoomDataManager;
import com.nnbc123.core.room.bean.RoomContributeUserInfo;
import com.nnbc123.core.room.bean.RoomInfo;
@@ -91,7 +91,7 @@ public class RoomCharmRankingListFragment extends BaseMvpFragment<IRoomCharmRank
public void firstLoad() {
isLoadMore = false;
page = Constants.PAGE_START;
page = CoreConstants.PAGE_START;
loadData();
}

View File

@@ -20,7 +20,7 @@ import com.nnbc123.core.room.bean.RoomRankMultiItem;
import com.nnbc123.library.base.factory.CreatePresenter;
import com.nnbc123.library.utils.ListUtils;
import com.nnbc123.app.ui.widget.UserInfoDialog;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.room.bean.RoomContributeDataInfo;
import com.nnbc123.core.room.bean.RoomContributeUserInfo;
@@ -113,7 +113,7 @@ public class RoomContributeFragment extends BaseMvpFragment<IRoomContributeListV
}
public void firstLoad() {
page = Constants.PAGE_START;
page = CoreConstants.PAGE_START;
loadData();
}
@@ -145,7 +145,7 @@ public class RoomContributeFragment extends BaseMvpFragment<IRoomContributeListV
public void getSingleRankingSuccess(RoomContributeDataInfo roomContributeDataInfo) {
List<RoomContributeUserInfo> list = roomContributeDataInfo.getRankings();
if (!ListUtils.isListEmpty(list)) {
if (page == Constants.PAGE_START) {
if (page == CoreConstants.PAGE_START) {
dataInfoList = roomContributeDataInfo.getRankings();
setContributeDataView(roomContributeDataInfo);
mRefreshLayout.finishRefresh();
@@ -156,7 +156,7 @@ public class RoomContributeFragment extends BaseMvpFragment<IRoomContributeListV
}
page++;
} else {
if (page == Constants.PAGE_START) {
if (page == CoreConstants.PAGE_START) {
dataInfoList = null;
mRefreshLayout.finishRefresh();
setContributeDataView(roomContributeDataInfo);
@@ -188,7 +188,7 @@ public class RoomContributeFragment extends BaseMvpFragment<IRoomContributeListV
@Override
public void getSingleRakingFail(int errorCode, String errorMsg) {
if (page == Constants.PAGE_START) {
if (page == CoreConstants.PAGE_START) {
mRefreshLayout.finishRefresh();
} else {
mRefreshLayout.finishLoadmore(0);

View File

@@ -43,7 +43,7 @@ import com.nnbc123.core.statistic.protocol.StatisticsProtocol
import com.nnbc123.core.user.UserModel
import com.nnbc123.core.user.bean.UserInfo
import com.nnbc123.core.utils.CurrentTimeUtils
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.library.base.factory.CreatePresenter
import com.nnbc123.library.utils.TimeUtils
import com.trello.rxlifecycle3.android.FragmentEvent

View File

@@ -8,8 +8,8 @@ import com.nnbc123.app.BuildConfig;
public class AppConfig {
protected static final String APP_ID = "1735573973195948033";
protected static final String APP_KEY = "r23OylNqnjOBPM0SDgVBfq6RCKMWAc0X";
protected static final String APP_ID = "1746741906623631362";
protected static final String APP_KEY = "L5WQjy0Xg2fcN0DhIig78qt0cPCMnS9W";
protected static boolean isTestEnv = BuildConfig.DEBUG;
}

View File

@@ -28,7 +28,7 @@ import com.opensource.svgaplayer.SVGADynamicEntity;
import com.nnbc123.app.R;
import com.nnbc123.app.application.XChatApplication;
import static com.nnbc123.xchat_android_constants.XChatConstants.SELECT_ANIM_DURATION;
import static com.nnbc123.core.XChatConstants.SELECT_ANIM_DURATION;
public class AnimHelper {

View File

@@ -6,10 +6,10 @@ import android.view.LayoutInflater
import android.view.animation.Animation
import android.widget.FrameLayout
import androidx.databinding.DataBindingUtil
import com.chuhai.utils.ktx.getColorById
import com.chuhai.utils.ktx.singleClick
import com.chuhai.utils.log.ILog
import com.chuhai.utils.spannable.SpannableTextBuilder
import com.chu.utils.ktx.getColorById
import com.chu.utils.ktx.singleClick
import com.chu.utils.log.ILog
import com.chu.utils.spannable.SpannableTextBuilder
import com.nnbc123.app.R
import com.nnbc123.app.databinding.RoomHourRankingWidgetBinding
import com.nnbc123.app.ui.webview.DialogWebViewActivity

View File

@@ -3,40 +3,40 @@ package com.nnbc123.app.avroom.newuserchargegift
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.util.Log
import android.view.Gravity
import android.view.View
import android.view.WindowManager
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.BillingResult
import com.android.billingclient.api.ProductDetails
import com.android.billingclient.api.Purchase
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nim.uikit.common.util.sys.TimeUtil
import com.trello.rxlifecycle3.android.ActivityEvent
import com.nnbc123.app.R
import com.nnbc123.app.avroom.firstcharge.SelectPayTypeDialog
import com.nnbc123.app.bank_card.activity.AddBankCardAgreementActivity
import com.nnbc123.app.base.BaseViewBindingActivity
import com.nnbc123.app.common.widget.dialog.DialogManager.AbsOkDialogListener
import com.nnbc123.app.databinding.DialogNewUserChargeGiftBinding
import com.nnbc123.app.ui.pay.BillingManager
import com.nnbc123.app.ui.setting.ModifyPwdActivity
import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.app.ui.webview.CommonWebViewActivity
import com.nnbc123.core.UriProvider
import com.nnbc123.core.auth.AuthModel
import com.nnbc123.core.pay.PayModel
import com.nnbc123.core.pay.PaymentActivity
import com.nnbc123.core.pay.bean.FirstChargeGoods
import com.nnbc123.core.pay.bean.FirstChargeReward
import com.nnbc123.core.pay.bean.PaymentResult
import com.nnbc123.core.pay.bean.PayRecordId
import com.nnbc123.core.pay.event.NewUserChargeEvent
import com.nnbc123.core.pay.model.unionpay.UnionPayModel
import com.nnbc123.core.statistic.StatisticManager
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
import com.nnbc123.core.user.UserModel
import com.nnbc123.core.utils.CurrentTimeUtils
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.net.IgnoreException
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.library.annatation.ActLayoutRes
import com.nnbc123.library.utils.JavaUtil
import com.nnbc123.library.common.Constants
import com.nnbc123.library.utils.AppMetaDataUtil
import com.nnbc123.library.utils.SingleToastUtil
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
@@ -46,13 +46,15 @@ import org.greenrobot.eventbus.ThreadMode
import java.util.concurrent.TimeUnit
@ActLayoutRes(R.layout.dialog_new_user_charge_gift)
class NewUserChargeGiftDialog : BaseViewBindingActivity<DialogNewUserChargeGiftBinding>() {
class NewUserChargeGiftDialog : BaseViewBindingActivity<DialogNewUserChargeGiftBinding>(),
BillingManager.BillingUpdatesListener {
private var goodsList: List<FirstChargeGoods>? = null
private var currGoods: FirstChargeGoods? = null
private lateinit var rewardAdapter: RewardAdapter
private lateinit var rvDelegate: RVDelegate<FirstChargeReward>
private val TAG = "NewUserChargeGiftDialog"
private var billingManager: BillingManager? = null
companion object {
@JvmStatic
fun start(context: Context) {
@@ -76,8 +78,7 @@ class NewUserChargeGiftDialog : BaseViewBindingActivity<DialogNewUserChargeGiftB
binding.tvCharge.setOnClickListener {
currGoods?.let {
SelectPayTypeDialog.newInstance(it.chargeProdId, "¥${it.chargeMoney}")
.show(this)
buyProduct(it.productDetails)
StatisticManager.Instance()
.onEvent(
StatisticsProtocol.EVENT_NUGIFT_POP_CLICK,
@@ -139,11 +140,14 @@ class NewUserChargeGiftDialog : BaseViewBindingActivity<DialogNewUserChargeGiftB
button.isChecked = true
}
button.isVisible = true
button.text = "${it.chargeMoney}"
button.text = "$${it.chargeMoney}"
} ?: run {
button.isVisible = false
}
}
if (AppMetaDataUtil.getChannelID().equals(Constants.CHANNEL_GOOGLE)) {
initBilling()
}
}
@SuppressLint("CheckResult", "SetTextI18n")
@@ -186,43 +190,6 @@ class NewUserChargeGiftDialog : BaseViewBindingActivity<DialogNewUserChargeGiftB
if (resultCode != RESULT_OK) {
return
}
//支付页面返回处理
if (requestCode == PaymentActivity.REQUEST_CODE_PAY) {
if (data != null && data.extras != null) {
val paymentResult: PaymentResult? =
data.getParcelableExtra(PaymentActivity.KEY_PAY_RESULT)
if (paymentResult != null) {
// 充值金额超过限定时,就必须先实名认证
when (JavaUtil.str2int(paymentResult.code)) {
PayModel.NOT_REAL_NAME_BEFORE_CHARGING -> dialogManager.showTipsDialog(
getString(R.string.tips_need_to_certification),
getString(R.string.go_to_certification),
object : AbsOkDialogListener() {
override fun onOk() {
// 跳去实名认证页面
CommonWebViewActivity.start(
this@NewUserChargeGiftDialog,
UriProvider.getTutuRealNamePage()
)
}
})
UnionPayModel.CODE_NEED_BIND_BANK_CARD_FIRST -> dialogManager.showTipsDialog(
getString(R.string.tips_need_bind_bank_card_first),
object : AbsOkDialogListener() {
override fun onOk() {
// 跳去添加银行卡页面
AddBankCardAgreementActivity.start(this@NewUserChargeGiftDialog)
}
})
else -> {
toast(paymentResult.msg)
//重新获取钱包信息
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
}
}
}
}
}
if (requestCode == BIND_CODE_GOLD) {
ModifyPwdActivity.start(this, ModifyPwdActivity.FOGERT_PAY_PWD)
}
@@ -233,9 +200,113 @@ class NewUserChargeGiftDialog : BaseViewBindingActivity<DialogNewUserChargeGiftB
finish()
}
override fun onResume() {
super.onResume()
if (billingManager?.isServiceConnected == true) {
billingManager?.onQueryPurchases()
}
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
billingManager?.destroy()
}
private fun initBilling() {
billingManager = BillingManager(this, this)
}
@SuppressLint("CheckResult")
override fun onBillingClientSetupFinished() {
Log.i(TAG, "onBillingClientSetupFinished")
goodsList?.let { initProduceList(it) }
}
private fun initProduceList(goodsList: List<FirstChargeGoods>) {
val productKeys: MutableList<String> = ArrayList()
for (bean in goodsList) {
productKeys.add(bean.chargeProdId)
}
billingManager?.querySkuDetailsAsync(productKeys) { billingResult: BillingResult, productDetails: MutableList<ProductDetails> ->
if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {
Log.w(
TAG,
"Unsuccessful query for type: " + BillingClient.ProductType.INAPP + ". Error code: " + billingResult.responseCode
)
return@querySkuDetailsAsync
}
if (productDetails.isNotEmpty()) {
for (chargeBean in goodsList) {
for (skuDetails in productDetails) {
if (skuDetails.productId == chargeBean.chargeProdId) {
chargeBean.productDetails = skuDetails
break
}
}
}
}
}
}
/*商品更新回调*/
@SuppressLint("CheckResult")
override fun onPurchasesUpdated(purchases: List<Purchase>) {
for (purchase in purchases) {
if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED &&
purchase.accountIdentifiers != null
) {
PayModel.get().verifyOrder(
purchase.accountIdentifiers!!.obfuscatedAccountId,
purchase.products[0],
purchase.packageName,
purchase.purchaseToken
)
.compose(bindToLifecycle())
.subscribe(
{ token: String? ->
//L.i("token=" + token);
billingManager?.consumeAsync(token)
}
) { throwable: Throwable ->
if (throwable !is IgnoreException) {
SingleToastUtil.showToast(throwable.message)
}
}
}
}
Log.i(TAG, "onPurchasesUpdated")
}
override fun onConsumeFinished(token: String?, result: Int) {
}
override fun onFailedHandle(result: Int) {
}
/*购买商品*/
@SuppressLint("CheckResult")
fun buyProduct(skuDetails: ProductDetails?) {
if (skuDetails != null) {
Log.d(TAG, "BuyProduct:" + skuDetails.productId)
PayModel.get().placeOrder(skuDetails.productId)
.compose(bindToLifecycle())
.subscribe(
{ recordId: PayRecordId ->
billingManager?.initiatePurchaseFlow(
skuDetails,
recordId.recordId
)
}
) { throwable: Throwable ->
SingleToastUtil.showToast(
throwable.message
)
}
} else {
Log.w(TAG, "skuDetails ==null")
}
}
}

View File

@@ -6,7 +6,7 @@ import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.load
import com.nnbc123.core.pay.bean.FirstChargeReward
import com.nnbc123.core.utils.TextUtils
import com.nnbc123.core.utils.CTextUtils
class RewardAdapter :
BaseQuickAdapter<FirstChargeReward, BaseViewHolder>(R.layout.item_new_user_charge_reward) {
@@ -16,6 +16,6 @@ class RewardAdapter :
helper.setText(R.id.tv_name, item.showText)
.setText(R.id.tv_time, "(${item.showTime})")
.setGone(R.id.tv_time, !TextUtils.isEmptyText(item.showTime))
.setGone(R.id.tv_time, !CTextUtils.isEmptyText(item.showTime))
}
}

View File

@@ -21,7 +21,7 @@ import com.netease.nimlib.sdk.util.Entry;
import com.nnbc123.app.avroom.activity.AVRoomActivity;
import com.nnbc123.app.avroom.view.IAvRoomView;
import com.nnbc123.app.base.BaseMvpPresenter;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.DemoCache;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.bean.RoomMicInfo;
@@ -292,7 +292,7 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
AvRoomDataManager.get().mCurrentRoomInfo.onlineNum = roomInfo.getOnlineUserCount();
Map<String, Object> extension = roomInfo.getExtension();
if (extension != null) {
String roomInfoStr = (String) extension.get(Constants.KEY_CHAT_ROOM_INFO_ROOM);
String roomInfoStr = (String) extension.get(CoreConstants.KEY_CHAT_ROOM_INFO_ROOM);
if (!TextUtils.isEmpty(roomInfoStr)) {
RoomInfo extRoomInfo = mGson.fromJson(roomInfoStr, RoomInfo.class);
extRoomInfo.setRoomId(Long.parseLong(roomInfo.getRoomId()));
@@ -302,7 +302,7 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
AvRoomDataManager.get().mCurrentRoomInfo = extRoomInfo;
}
//获取云信麦序相关信息
String roomMicStr = (String) extension.get(Constants.KEY_CHAT_ROOM_INFO_MIC);
String roomMicStr = (String) extension.get(CoreConstants.KEY_CHAT_ROOM_INFO_MIC);
LogUtils.d(roomMicStr);
if (!TextUtils.isEmpty(roomMicStr)) {
//清除魅力值(重新进房会触发退房,已经清除过了)
@@ -368,7 +368,7 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
if (AvRoomDataManager.get().isRoomInQueuingMicMode(data)) {
//noinspection ResultOfMethodCallIgnored
MicQueueModel.get()
.loadMicQueueList(data.getUid(), 1, Constants.PAGE_SIZE)
.loadMicQueueList(data.getUid(), 1, CoreConstants.PAGE_SIZE)
.subscribe((respQueuingMicListInfo, throwable) -> {
if (throwable == null) {
List<QueuingMicMemeberInfo> queue = respQueuingMicListInfo.getQueue();

View File

@@ -12,7 +12,7 @@ import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.nnbc123.app.avroom.view.IHomePartyView;
import com.nnbc123.app.utils.UserUtils;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.bean.RoomQueueInfo;
import com.nnbc123.core.im.custom.bean.CustomAttachment;
@@ -143,7 +143,7 @@ public class HomePartyPresenter extends BaseRoomPresenter<IHomePartyView> {
List<FaceReceiveInfo> faceReceiveInfos = new ArrayList<>();
FaceReceiveInfo faceReceiveInfo = new FaceReceiveInfo();
faceReceiveInfo.setNick(userInfo.getNick());
faceReceiveInfo.setFaceId(Constants.DRAGON_BAR_ID);
faceReceiveInfo.setFaceId(CoreConstants.DRAGON_BAR_ID);
faceReceiveInfo.setUid(userInfo.getUid());
faceReceiveInfo.setResultIndexes(integers);

View File

@@ -3,7 +3,7 @@ package com.nnbc123.app.avroom.presenter;
import com.nnbc123.app.avroom.view.IRecordForPKView;
import com.nnbc123.app.base.BaseMvpPresenter;
import com.nnbc123.app.home.helper.LoadPageDataHelper;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.manager.AvRoomDataManager;
import com.nnbc123.core.room.bean.RoomInfo;
import com.nnbc123.core.room.pk.bean.PKRecordInfo;
@@ -39,7 +39,7 @@ public class RecordForPKPresenter extends BaseMvpPresenter<IRecordForPKView>
return PkModel.get().loadPKRecordList(
currentRoomInfo.getUid(),
curPage,
Constants.PAGE_SIZE
CoreConstants.PAGE_SIZE
)
.flatMap(new Function<PKRecordListInfo, SingleSource<? extends List<PKRecordInfo>>>() {
@Override

View File

@@ -4,7 +4,7 @@ import com.nnbc123.core.bean.RoomNewbieInfo;
import com.nnbc123.app.base.BaseMvpPresenter;
import com.nnbc123.app.module.IRoomNewbieView;
import com.nnbc123.app.module.RoomNewbieModel;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import java.util.List;
@@ -22,7 +22,7 @@ public class RoomNewbiePresenter extends BaseMvpPresenter<IRoomNewbieView> {
page++;
}
RoomNewbieModel.get().getRoomNewbieList(page, Constants.PAGE_SIZE)
RoomNewbieModel.get().getRoomNewbieList(page, CoreConstants.PAGE_SIZE)
.compose(bindToLifecycle()).subscribe(new SingleObserver<List<RoomNewbieInfo>>() {
@Override
public void onSubscribe(Disposable d) {

View File

@@ -7,7 +7,7 @@ import android.view.View;
import com.coorchice.library.SuperTextView;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.nnbc123.app.R;
import com.nnbc123.app.UIHelper;
import com.nnbc123.app.utils.UIHelper;
import com.nnbc123.app.avroom.widget.MessageView;
import com.nnbc123.app.base.list.BaseViewHolder;
import com.nnbc123.app.base.list.CommonAdapter;

View File

@@ -11,7 +11,7 @@ import com.nnbc123.app.databinding.DialogRedPackageGoRoomBinding
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.redpackage.RedPackageNotifyInfo
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import org.greenrobot.eventbus.EventBus
class RedPackageGoRoomDialog : BaseDialog<DialogRedPackageGoRoomBinding>() {

View File

@@ -11,7 +11,7 @@ import com.nnbc123.core.redpackage.RedEnvelopeItemVO
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.app.utils.UserUtils
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import java.text.SimpleDateFormat
import java.util.*

View File

@@ -100,11 +100,11 @@ class RedPackageOpenDialog : BaseDialog<DialogRedPackageOpenBinding>() {
it.addListener(object : AnimatorListenerAdapter() {
var isCanceled = false
override fun onAnimationCancel(animation: Animator?) {
override fun onAnimationCancel(animation: Animator) {
isCanceled = true
}
override fun onAnimationEnd(animation: Animator?) {
override fun onAnimationEnd(animation: Animator) {
if (!isCanceled) {
openRedPackage()
}

View File

@@ -29,7 +29,7 @@ import com.nnbc123.core.redpackage.*
import com.nnbc123.core.statistic.StatisticManager
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
import com.nnbc123.core.user.UserModel
import com.nnbc123.core.utils.toIntOrDef
import com.nnbc123.core.utils.ktx.toIntOrDef
import com.nnbc123.library.annatation.ActLayoutRes
import com.nnbc123.library.utils.CommonUtils
import com.nnbc123.library.utils.SingleToastUtil

View File

@@ -19,8 +19,8 @@ import com.nnbc123.core.im.custom.bean.RoomPkBean
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.SingleRoomPKModel
import com.nnbc123.core.utils.CurrentTimeUtils
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import com.nnbc123.core.utils.ktx.toast
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable

View File

@@ -15,10 +15,10 @@ import com.nnbc123.core.auth.AuthModel
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.SingleRoomPKModel
import com.nnbc123.core.room.anotherroompk.SimpleRoomInfo
import com.nnbc123.core.utils.ifNotNullOrEmpty
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.toIntOrDef
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.ifNotNullOrEmpty
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import com.nnbc123.core.utils.ktx.toIntOrDef
import com.nnbc123.core.utils.ktx.toast
class SingleRoomPKCreateActivity : BaseViewBindingActivity<ActivitySingleRoomPkCreateBinding>() {

View File

@@ -8,7 +8,7 @@ import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.room.anotherroompk.SimpleRoomInfo
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
class SingleRoomPKSearchAdapter :
BaseQuickAdapter<SimpleRoomInfo, BaseViewHolder>(R.layout.item_single_room_pk_search) {

View File

@@ -9,7 +9,7 @@ import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogSingleRoomPkFinishBinding
import com.nnbc123.app.ui.utils.load
import com.nnbc123.core.im.custom.bean.RoomPkBean
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import java.util.concurrent.TimeUnit

View File

@@ -8,7 +8,7 @@ import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogSingleRoomPkForceFinishBinding
import com.nnbc123.app.ui.utils.ImageLoadUtils
import com.nnbc123.core.im.custom.bean.RoomPkBean
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.subAndReplaceDot
class SingleRoomPkForceFinishDialog : BaseDialog<DialogSingleRoomPkForceFinishBinding>() {

View File

@@ -8,9 +8,9 @@ import com.nnbc123.app.databinding.DialogSingleRoomPkReceivedBinding
import com.nnbc123.core.im.custom.bean.RoomPkBean
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.SingleRoomPKModel
import com.nnbc123.core.utils.ifNotNullOrEmpty
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.ifNotNullOrEmpty
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import com.nnbc123.core.utils.ktx.toast
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable

View File

@@ -1,7 +1,7 @@
package com.nnbc123.app.avroom.singleroompk
import com.nnbc123.core.room.anotherroompk.SingleRoomPKModel
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogSingleRoomPkRuleBinding

View File

@@ -6,7 +6,7 @@ import android.view.WindowManager
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.anotherroompk.ShowPkMatchEvent
import com.nnbc123.core.room.anotherroompk.SingleRoomPKModel
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogSingleRoomSelectTypeBinding
import org.greenrobot.eventbus.EventBus

View File

@@ -33,7 +33,6 @@ import com.nnbc123.app.treasure_box.widget.GoldBoxHelper;
import com.nnbc123.app.ui.utils.ImageLoadUtils;
import com.nnbc123.app.vip.VipMainActivity;
import com.nnbc123.core.DemoCache;
import com.nnbc123.core.helper.ImHelperUtils;
import com.nnbc123.core.manager.AvRoomDataManager;
import com.nnbc123.core.manager.IMMessageManager;
import com.nnbc123.core.pay.event.FirstChargeEvent;
@@ -44,7 +43,7 @@ import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.core.super_admin.util.SuperAdminUtil;
import com.nnbc123.core.user.UserModel;
import com.nnbc123.core.utils.SharedPreferenceUtils;
import com.nnbc123.core.utils.StringExtensionKt;
import com.nnbc123.core.utils.ktx.StringExtensionKt;
import com.nnbc123.core.utils.net.RxHelper;
import com.nnbc123.library.utils.ListUtils;

View File

@@ -19,7 +19,7 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nim.uikit.common.util.string.NimStringUtil;
import com.opensource.svgaplayer.SVGACallback;
import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView;
@@ -47,7 +47,7 @@ import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;
import javax.annotation.Nullable;
import androidx.annotation.Nullable;
/**
* @author chenran
@@ -181,7 +181,7 @@ public class GiftEffectView extends RelativeLayout implements SVGACallback {
effectHandler.sendEmptyMessageDelayed(0, 6000);
if (giftInfo.getOtherViewType() == 1 && !TextUtils.isEmpty(giftInfo.getViewUrl())) {
drawVAPEffect(giftInfo.getViewUrl());
} else if (giftInfo.isHasVggPic() && !StringUtil.isEmpty(giftInfo.getVggUrl())) {
} else if (giftInfo.isHasVggPic() && !NimStringUtil.isEmpty(giftInfo.getVggUrl())) {
try {
drawSvgaEffect(giftInfo.getVggUrl());
} catch (MalformedURLException e) {

View File

@@ -70,7 +70,7 @@ import java.util.List;
import java.util.Objects;
import java.util.Random;
import javax.annotation.Nullable;
import androidx.annotation.Nullable;
/**

View File

@@ -55,7 +55,7 @@ import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.constant.NotificationType;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.nnbc123.app.R;
import com.nnbc123.app.UIHelper;
import com.nnbc123.app.utils.UIHelper;
import com.nnbc123.app.avroom.activity.AVRoomActivity;
import com.nnbc123.app.avroom.dialog.PKResultDialog;
import com.nnbc123.app.common.widget.CustomAutoWidthImageSpan;
@@ -135,7 +135,7 @@ import com.nnbc123.core.manager.AvRoomDataManager;
import com.nnbc123.core.manager.IMNetEaseManager;
import com.nnbc123.core.miniworld.bean.MiniWorldInWorldInfo;
import com.nnbc123.core.monsterhunting.bean.MonsterHuntingResult;
import com.nnbc123.core.monsterhunting.bean.MonsterProtocol;
import com.nnbc123.core.monsterhunting.bean.MonsterProtocolDataBean;
import com.nnbc123.core.noble.NobleInfo;
import com.nnbc123.core.noble.NobleUtil;
import com.nnbc123.core.praise.PraiseModel;
@@ -169,7 +169,7 @@ import com.nnbc123.library.utils.JavaUtil;
import com.nnbc123.library.utils.ListUtils;
import com.nnbc123.library.utils.SingleToastUtil;
import com.nnbc123.library.utils.SizeUtils;
import com.nnbc123.xchat_android_constants.XChatConstants;
import com.nnbc123.core.XChatConstants;
import com.tongdaxing.erban.sadmin.utils.SaAttachmentToMsgUtil;
import org.greenrobot.eventbus.EventBus;
@@ -870,7 +870,7 @@ public class MessageView extends FrameLayout {
} else if (first == CustomAttachment.CUSTOM_MSG_HEADER_TYPE_MONSTER_HUNTING) {
switch (second) {
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_MONSTER_HUNTING:
MonsterProtocol.DataBean dataBean = ((MonsterStatusAttachment) attachment).getDataBean();
MonsterProtocolDataBean dataBean = ((MonsterStatusAttachment) attachment).getDataBean();
setMonsterNotifyMessage(tvContent, dataBean.getNotifyMessage());
break;
case CustomAttachment.CUSTOM_NOTI_SUB_GAME_RESULT:
@@ -2968,7 +2968,7 @@ public class MessageView extends FrameLayout {
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MSG_HEADER_TYPE_MONSTER_HUNTING) {
switch (attachment.getSecond()) {
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_MONSTER_HUNTING:
MonsterProtocol.DataBean dataBean = ((MonsterStatusAttachment) attachment).getDataBean();
MonsterProtocolDataBean dataBean = ((MonsterStatusAttachment) attachment).getDataBean();
RoomInfo mCurrentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (!Objects.equals(mCurrentRoomInfo.getUid(), dataBean.getAppearRoomUid())) {
AVRoomActivity.start(getContext(), dataBean.getAppearRoomUid());

View File

@@ -12,6 +12,7 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
@@ -53,6 +54,7 @@ import io.reactivex.disposables.Disposable;
* @author xiaoyu
* @date 2017/12/20
*/
@Keep
public class MicroView extends LinearLayout implements View.OnLayoutChangeListener {
private static final String TAG = "MicroView";
public RecyclerView recyclerView;

View File

@@ -10,14 +10,14 @@ import android.net.Uri
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.core.view.isVisible
import com.chuhai.core.player.PlaybackState
import com.chuhai.core.player.PlayerListener
import com.chuhai.core.player.exo.ExoMediaItem
import com.chuhai.core.player.exo.ExoPlayer
import com.chuhai.utils.ICleared
import com.chuhai.utils.ktx.dp
import com.chuhai.utils.ktx.roundCorner
import com.chuhai.utils.log.ILog
import com.chu.core.player.PlaybackState
import com.chu.core.player.PlayerListener
import com.chu.core.player.exo.ExoMediaItem
import com.chu.core.player.exo.ExoPlayer
import com.chu.utils.ICleared
import com.chu.utils.ktx.dp
import com.chu.utils.ktx.roundCorner
import com.chu.utils.log.ILog
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout
import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil
import com.nnbc123.core.im.custom.bean.RoomPrivilegeAttachment
@@ -122,6 +122,9 @@ class PrivilegeCardEngine(
loopQueue()
}
}
else ->{
}
}
}

View File

@@ -39,7 +39,7 @@ import com.nnbc123.app.ui.widget.SimpleAnimListener
import com.nnbc123.app.ui.widget.drawgift.DrawGiftPlayHelper
import com.nnbc123.app.utils.MsgBuilder
import com.nnbc123.app.utils.SpannableBuilder
import com.nnbc123.xchat_android_constants.XChatConstants
import com.nnbc123.core.XChatConstants
import com.nnbc123.core.auth.AuthModel
import com.nnbc123.core.decoration.car.bean.CarInfo
import com.nnbc123.core.im.custom.bean.*
@@ -50,8 +50,8 @@ import com.nnbc123.core.room.bean.DatingNotifyInfo
import com.nnbc123.core.super_admin.util.SuperAdminUtil
import com.nnbc123.core.user.UserModel
import com.nnbc123.core.user.bean.UserInfo
import com.nnbc123.core.utils.sub
import com.nnbc123.core.utils.subAndReplaceDot
import com.nnbc123.core.utils.ktx.sub
import com.nnbc123.core.utils.ktx.subAndReplaceDot
import com.nnbc123.library.utils.ListUtils
import com.opensource.svgaplayer.*
import io.reactivex.Observable

View File

@@ -11,7 +11,7 @@ import com.nnbc123.core.room.wishlist.WishCreateItemInfo
import com.nnbc123.app.R
import com.nnbc123.app.base.BaseDialog
import com.nnbc123.app.databinding.DialogWishListCreateBinding
import com.nnbc123.core.utils.toIntOrDef
import com.nnbc123.core.utils.ktx.toIntOrDef
import com.nnbc123.library.utils.SingleToastUtil
import kotlin.math.max
import kotlin.math.min

View File

@@ -10,7 +10,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.nnbc123.core.manager.AvRoomDataManager
import com.nnbc123.core.room.wishlist.WishCreateItemInfo
import com.nnbc123.core.room.wishlist.WishItemInfo
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.app.R
import com.nnbc123.app.avroom.wishlist.history.WishListHistoryActivity
import com.nnbc123.app.base.BaseViewBindingActivity

View File

@@ -8,7 +8,7 @@ import com.nnbc123.core.gift.bean.SimpleUserInfo
import com.nnbc123.core.room.wishlist.WishCreateItemInfo
import com.nnbc123.core.room.wishlist.WishItemInfo
import com.nnbc123.core.room.wishlist.WishListModel
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import com.nnbc123.app.base.Event
class WishListViewModel : BaseViewModel() {

View File

@@ -1,6 +1,6 @@
package com.nnbc123.app.base;
import static com.nnbc123.core.Constants.DEBUG_MAX_UID;
import static com.nnbc123.core.CoreConstants.DEBUG_MAX_UID;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_HEAD_NOBLE;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_OPENNOBLE;
import static com.nnbc123.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_RENEWNOBLE;
@@ -45,8 +45,8 @@ import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMSDK;
import com.netease.nimlib.sdk.Observer;
import com.netease.nimlib.sdk.msg.model.BroadcastMessage;
import com.nnbc123.app.MiddleActivity;
import com.nnbc123.app.NimMiddleActivity;
import com.nnbc123.app.ui.agent.AgentActivity;
import com.nnbc123.app.ui.im.NimMiddleActivity;
import com.nnbc123.app.R;
import com.nnbc123.app.application.XChatApplication;
import com.nnbc123.app.avroom.activity.AVRoomActivity;
@@ -82,7 +82,7 @@ import com.nnbc123.core.manager.RoomEvent;
import com.nnbc123.core.mentoring_relationship.event.GrabApprenticesEvent;
import com.nnbc123.core.newbie.NewbieHelloInfo;
import com.nnbc123.core.newbie.event.NewbieHelloDialogEvent;
import com.nnbc123.core.noble.AllServiceGiftProtocol;
import com.nnbc123.core.noble.AllServiceGiftProtocolDataBean;
import com.nnbc123.core.noble.NobleInfo;
import com.nnbc123.core.noble.NobleProtocol;
import com.nnbc123.core.redpackage.RedPackageNotifyInfo;
@@ -100,7 +100,7 @@ import com.nnbc123.library.utils.UIUtils;
import com.nnbc123.library.utils.codec.DESUtils;
import com.nnbc123.library.utils.config.BasicConfig;
import com.nnbc123.library.utils.log.MLog;
import com.nnbc123.xchat_android_constants.XChatConstants;
import com.nnbc123.core.XChatConstants;
import com.orhanobut.logger.Logger;
import com.readystatesoftware.systembartint.SystemBarTintManager;
import com.tbruyelle.rxpermissions2.RxPermissions;
@@ -929,7 +929,7 @@ public abstract class BaseActivity extends RxAppCompatActivity
if (this instanceof AddUserInfoActivity ||
UserUtils.getUserInfo() == null)
return;
AllServiceGiftProtocol.DataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocol.DataBean.class);
AllServiceGiftProtocolDataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocolDataBean.class);
if (data == null || data.getGiftUrl() == null || !data.isCeremonyGift())
return;
new AllServiceGiftLevelCeremonyDialog(context, data).show();
@@ -987,7 +987,7 @@ public abstract class BaseActivity extends RxAppCompatActivity
acts.add(LoginCodeActivity.class);
acts.add(ResetPasswordActivity.class);
acts.add(AddUserInfoActivity.class);
acts.add(MiddleActivity.class);
acts.add(AgentActivity.class);
acts.add(NimMiddleActivity.class);
for (Class act : acts) {

View File

@@ -6,7 +6,7 @@ import androidx.databinding.ObservableField;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.bean.response.ServiceResult;
import com.nnbc123.core.utils.net.RxHelper;
import com.nnbc123.library.utils.SingleToastUtil;
@@ -23,7 +23,7 @@ import io.reactivex.functions.Consumer;
public abstract class BaseListViewModel<D> {
public int page = 1;
public int pageSize = Constants.PAGE_SIZE;
public int pageSize = CoreConstants.PAGE_SIZE;
public ObservableBoolean loading = new ObservableBoolean(false);
public ObservableBoolean isLode = new ObservableBoolean(false);

View File

@@ -1,16 +1,13 @@
package com.nnbc123.app.base;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -21,25 +18,10 @@ import com.nnbc123.app.R;
import com.nnbc123.app.common.widget.OriginalDrawStatusClickSpan;
import com.nnbc123.app.ui.webview.CommonWebViewActivity;
import com.nnbc123.core.UriProvider;
import com.nnbc123.core.auth.AuthModel;
import com.nnbc123.core.bean.LoginTipsInfo;
import com.nnbc123.core.market_verify.MarketVerifyModel;
import com.nnbc123.core.statistic.StatisticManager;
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.xchat_android_constants.XChatConstants;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BiConsumer;
public abstract class BaseLoginAct extends BaseActivity {
protected CheckBox tvProtocol;
protected TextView wxLogin;
protected TextView qqLogin;
protected TextView tvLoginQuickPass;
protected TextView tvLoginTip;
protected TextView tvDesc;
protected TextView tvProtocol;
protected boolean canClick = true;
@@ -56,11 +38,29 @@ public abstract class BaseLoginAct extends BaseActivity {
String privacyAgreementTip = context.getString(R.string.tip_privacy_agreement);
String userAgreementTip = context.getString(R.string.tip_user_agreement);
String privacyAgreementDescTip = context.getString(R.string.text_login_protocol, privacyAgreementTip, userAgreementTip);
String privacyAgreementDescTip = context.getString(R.string.text_login_protocol, userAgreementTip, privacyAgreementTip);
SpannableString ss = new SpannableString(privacyAgreementDescTip);
int privacyAgreementTipIndex = privacyAgreementDescTip.indexOf(privacyAgreementTip);
int userAgreementTipIndex = privacyAgreementDescTip.indexOf(userAgreementTip);
ss.setSpan(new OriginalDrawStatusClickSpan(ContextCompat.getColor(context, R.color.text_normal_282828)) {
@Override
public void onClick(@NonNull View widget) {
if (!canClick) {
return;
}
if (widget instanceof TextView)
((TextView) widget).setHighlightColor(getResources().getColor(android.R.color.transparent));
CommonWebViewActivity.start(context, UriProvider.getUserProtocolUrl());
}
}, userAgreementTipIndex, userAgreementTipIndex + userAgreementTip.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(
new StyleSpan(Typeface.BOLD), userAgreementTipIndex, userAgreementTipIndex + userAgreementTip.length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
);
ss.setSpan(new OriginalDrawStatusClickSpan(ContextCompat.getColor(context, R.color.text_normal_282828)) {
@Override
public void onClick(@NonNull View widget) {
@@ -74,167 +74,17 @@ public abstract class BaseLoginAct extends BaseActivity {
}
}, privacyAgreementTipIndex, privacyAgreementTipIndex + privacyAgreementTip.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(new OriginalDrawStatusClickSpan(ContextCompat.getColor(context, R.color.text_normal_282828)) {
@Override
public void onClick(@NonNull View widget) {
if (!canClick) {
return;
}
if (widget instanceof TextView)
((TextView) widget).setHighlightColor(getResources().getColor(android.R.color.transparent));
CommonWebViewActivity.start(context, UriProvider.getUserProtocolUrl());
}
}, userAgreementTipIndex, userAgreementTipIndex + privacyAgreementTip.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(
new StyleSpan(Typeface.BOLD),
privacyAgreementTipIndex, privacyAgreementTipIndex + privacyAgreementTip.length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
);
tvProtocol.setText(ss);
tvProtocol.setHighlightColor(Color.TRANSPARENT);
tvProtocol.setMovementMethod(new LinkMovementMethod());
}
@SuppressLint("CheckResult")
protected void showLoginTip() {
MarketVerifyModel.get().loadLoginTip()
.compose(bindToLifecycle())
.subscribe(new BiConsumer<LoginTipsInfo, Throwable>() {
@Override
public void accept(LoginTipsInfo loginTipsInfo, Throwable throwable) throws Exception {
if (throwable == null) {
showTvDesc(loginTipsInfo.getTips());
showTvLoginTip(loginTipsInfo.isShowWechat() || loginTipsInfo.isShowQq());
showThirdPartLogin(loginTipsInfo.isShowWechat(), loginTipsInfo.isShowQq(), loginTipsInfo.isShowOneClick());
} else {
showTvLoginTip(false);
showThirdPartLogin(false, false, false);
}
}
});
}
protected void showThirdPartLogin(boolean isShowWechat, boolean isShowQq, boolean isShowOneClick) {
showwxLogin(isShowWechat);
showqqLogin(isShowQq);
showOneClickLogin(isShowOneClick);
}
private void showTvLoginTip(boolean visible) {
if (tvLoginTip != null) {
tvLoginTip.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
private void showwxLogin(boolean visible) {
if (wxLogin != null) {
wxLogin.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
private void showqqLogin(boolean visible) {
if (qqLogin != null) {
qqLogin.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
private void showOneClickLogin(boolean visible) {
if (tvLoginQuickPass != null) {
tvLoginQuickPass.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
private void showTvDesc(String tips) {
if (tvDesc != null && !TextUtils.isEmpty(tips)) {
SpannableStringBuilder builder = new SpannableStringBuilder(tips);
int start = tips.indexOf("如何登录");
if (start > -1) {
builder.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, R.color.color_FE4C62)), start, start + 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
builder.setSpan(new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View widget) {
if (!canClick) {
return;
}
CommonWebViewActivity.start(BaseLoginAct.this, UriProvider.WEB_URL + XChatConstants.LOGIN_ERBAN_ACCOUNT_URL);
}
}, start, start + 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
tvDesc.setText(builder);
tvDesc.setHighlightColor(Color.TRANSPARENT);
tvDesc.setMovementMethod(new LinkMovementMethod());
}
}
protected void wxLogin() {
// 易盾保护 token
// String yiDunToken = watchman.getToken(XChatConstants.YI_DUN_BUSINESS_ID);
// 数美天网 deviceId
// String shuMeiDeviceId = SmAntiFraud.getDeviceId();
getDialogManager().showProgressDialog(this, "请稍后");
AuthModel.get()
.wxLogin("", "")
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
mCompositeDisposable.add(d);
}
@Override
public void onSuccess(String s) {
getDialogManager().dismissDialog();
setResult(RESULT_OK);
finish();
}
@Override
public void onError(Throwable e) {
getDialogManager().dismissDialog();
dealWithLoginError(e);
}
});
StatisticManager.Instance().onEvent(this,
StatisticsProtocol.EVENT_LOGIN_WX_CLICK, "点击微信登录", null);
}
protected void qqLogin() {
// 易盾保护 token
// String yiDunToken = watchman.getToken(XChatConstants.YI_DUN_BUSINESS_ID);
// 数美天网 deviceId
// String shuMeiDeviceId = SmAntiFraud.getDeviceId();
String yiDunToken = "";
String shuMeiDeviceId = "";
getDialogManager().showProgressDialog(this, "请稍后");
AuthModel.get()
.qqLogin(yiDunToken, shuMeiDeviceId)
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
mCompositeDisposable.add(d);
}
@Override
public void onSuccess(String s) {
getDialogManager().dismissDialog();
setResult(RESULT_OK);
finish();
}
@Override
public void onError(Throwable e) {
getDialogManager().dismissDialog();
dealWithLoginError(e);
}
});
StatisticManager.Instance().onEvent(this,
StatisticsProtocol.EVENT_LOGIN_QQ_CLICK, "点击qq登录", null);
}
public abstract void dealWithLoginError(Throwable e);
@Override

View File

@@ -6,7 +6,7 @@ import androidx.databinding.ObservableField;
import androidx.databinding.ViewDataBinding;
import com.trello.rxlifecycle3.LifecycleProvider;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.bean.response.ServiceResult;
import com.nnbc123.core.utils.net.RxHelper;
@@ -23,7 +23,7 @@ import io.reactivex.functions.Consumer;
public abstract class BaseMsListViewModel<V extends ViewDataBinding, D> {
public V mBinding;
public int page=1;
public int pageSize= Constants.PAGE_SIZE;
public int pageSize= CoreConstants.PAGE_SIZE;
public ObservableBoolean loading=new ObservableBoolean(false);
public ObservableBoolean isLode=new ObservableBoolean(false);

View File

@@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.nnbc123.core.utils.toast
import com.nnbc123.core.utils.ktx.toast
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch

View File

@@ -18,7 +18,7 @@ public abstract class CommonAdapter<T, K extends BaseViewHolder> extends Recycle
private List<T> mData;
private OnItemClickListener<T, K> mOnItemClickListener;
private OnItemParentClickListener<T, K> mOnItemClickListener;
private OnItemChildClickListener<T, K> mOnItemChildClickListener;
@@ -36,7 +36,7 @@ public abstract class CommonAdapter<T, K extends BaseViewHolder> extends Recycle
return this;
}
public CommonAdapter<T, K> setOnItemClickListener(OnItemClickListener<T, K> onItemClickListener) {
public CommonAdapter<T, K> setOnItemClickListener(OnItemParentClickListener<T, K> onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
return this;
}

View File

@@ -4,6 +4,6 @@ package com.nnbc123.app.base.list;
* Created by lvzebiao on 2018/12/18.
*/
public interface OnItemClickListener<T, K extends BaseViewHolder> {
public interface OnItemParentClickListener<T, K extends BaseViewHolder> {
void onItemClick(K holder, T item, int position);
}

View File

@@ -15,7 +15,7 @@ import com.nnbc123.app.R;
import com.nnbc123.app.base.BaseBindingActivity;
import com.nnbc123.app.bills.adapter.BillBaseAdapter;
import com.nnbc123.app.common.NoDataFragment;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.bills.bean.BillItemEntity;
import com.nnbc123.library.utils.TimeUtils;
@@ -38,8 +38,8 @@ public abstract class BillBaseActivity<T extends ViewDataBinding> extends BaseBi
protected SwipeRefreshLayout mRefreshLayout;
protected BillBaseAdapter adapter;
protected int mCurrentCounter = Constants.PAGE_START;
protected static final int PAGE_SIZE = Constants.BILL_PAGE_SIZE;
protected int mCurrentCounter = CoreConstants.PAGE_START;
protected static final int PAGE_SIZE = CoreConstants.BILL_PAGE_SIZE;
protected TimePickerDialog.Builder mDialogYearMonthDayBuild;
protected long time = System.currentTimeMillis();
protected List<BillItemEntity> mBillItemEntityList = new ArrayList<>();
@@ -94,7 +94,7 @@ public abstract class BillBaseActivity<T extends ViewDataBinding> extends BaseBi
mRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mCurrentCounter = Constants.PAGE_START;
mCurrentCounter = CoreConstants.PAGE_START;
// time = System.currentTimeMillis();
loadData();
}
@@ -108,7 +108,7 @@ public abstract class BillBaseActivity<T extends ViewDataBinding> extends BaseBi
}
public void onGetDataError(String error) {
if (mCurrentCounter == Constants.PAGE_START) {
if (mCurrentCounter == CoreConstants.PAGE_START) {
showNetworkErr();
} else {
adapter.loadMoreFail();
@@ -119,7 +119,7 @@ public abstract class BillBaseActivity<T extends ViewDataBinding> extends BaseBi
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_today_select:
mCurrentCounter = Constants.PAGE_START;
mCurrentCounter = CoreConstants.PAGE_START;
time = System.currentTimeMillis();
setDate(time);
showLoading();
@@ -136,7 +136,7 @@ public abstract class BillBaseActivity<T extends ViewDataBinding> extends BaseBi
public void onDateSet(TimePickerDialog timePickerView, long millseconds) {
this.time = millseconds;
setDate(millseconds);
mCurrentCounter = Constants.PAGE_START;
mCurrentCounter = CoreConstants.PAGE_START;
showLoading();
loadData();
}
@@ -165,7 +165,7 @@ public abstract class BillBaseActivity<T extends ViewDataBinding> extends BaseBi
@Override
public View.OnClickListener getLoadListener() {
return v -> {
mCurrentCounter = Constants.PAGE_START;
mCurrentCounter = CoreConstants.PAGE_START;
showLoading();
loadData();
};

View File

@@ -12,7 +12,7 @@ import com.nnbc123.app.bills.adapter.GiftExpendAdapter;
import com.nnbc123.app.databinding.ActivityBillsGiftBinding;
import com.nnbc123.app.ui.pay.ChargeActivity;
import com.nnbc123.app.ui.widget.RecyclerViewNoBugLinearLayoutManager;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.bills.BillModel;
import com.nnbc123.core.bills.bean.BillItemEntity;
import com.nnbc123.core.bills.bean.ExpendInfo;
@@ -88,7 +88,7 @@ public class BillGiftExpendActivity extends BillBaseActivity<ActivityBillsGiftBi
public void onGetExpendBills(ExpendListInfo data) {
mRefreshLayout.setRefreshing(false);
if (null != data) {
if (mCurrentCounter == Constants.PAGE_START) {
if (mCurrentCounter == CoreConstants.PAGE_START) {
hideStatus();
mBillItemEntityList.clear();
adapter.setNewData(mBillItemEntityList);
@@ -129,13 +129,13 @@ public class BillGiftExpendActivity extends BillBaseActivity<ActivityBillsGiftBi
}
}
}
if (billItemEntities.size() < Constants.BILL_PAGE_SIZE && mCurrentCounter == Constants.PAGE_START) {
if (billItemEntities.size() < CoreConstants.BILL_PAGE_SIZE && mCurrentCounter == CoreConstants.PAGE_START) {
adapter.setEnableLoadMore(false);
}
adapter.addData(billItemEntities);
} else {
if (mCurrentCounter == Constants.PAGE_START) {
if (mCurrentCounter == CoreConstants.PAGE_START) {
showNoData(R.drawable.icon_common_failure, "哼,你们不爱我了,一个礼物都没有");
} else {
adapter.loadMoreEnd(true);

View File

@@ -14,7 +14,7 @@ import com.nnbc123.app.bills.adapter.GiftIncomeAdapter;
import com.nnbc123.app.databinding.ActivityBillsGiftBinding;
import com.nnbc123.app.ui.pay.ChargeActivity;
import com.nnbc123.app.ui.widget.RecyclerViewNoBugLinearLayoutManager;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.bills.BillModel;
import com.nnbc123.core.bills.bean.BillItemEntity;
import com.nnbc123.core.bills.bean.IncomeInfo;
@@ -83,7 +83,7 @@ public class BillGiftInComeActivity extends BillBaseActivity<ActivityBillsGiftBi
}
private void firstLoadDate() {
mCurrentCounter = Constants.PAGE_START;
mCurrentCounter = CoreConstants.PAGE_START;
showLoading();
onLoadGoldNum();
loadData();
@@ -116,7 +116,7 @@ public class BillGiftInComeActivity extends BillBaseActivity<ActivityBillsGiftBi
public void onGetIncomeBills(IncomeListInfo data) {
mRefreshLayout.setRefreshing(false);
if (null != data) {
if (mCurrentCounter == Constants.PAGE_START) {
if (mCurrentCounter == CoreConstants.PAGE_START) {
hideStatus();
mBillItemEntityList.clear();
adapter.setNewData(mBillItemEntityList);
@@ -158,12 +158,12 @@ public class BillGiftInComeActivity extends BillBaseActivity<ActivityBillsGiftBi
}
}
}
if (billItemEntities.size() < Constants.BILL_PAGE_SIZE && mCurrentCounter == Constants.PAGE_START) {
if (billItemEntities.size() < CoreConstants.BILL_PAGE_SIZE && mCurrentCounter == CoreConstants.PAGE_START) {
adapter.setEnableLoadMore(false);
}
adapter.addData(billItemEntities);
} else {
if (mCurrentCounter == Constants.PAGE_START) {
if (mCurrentCounter == CoreConstants.PAGE_START) {
showNoData(R.drawable.icon_common_failure, "哼,你们不爱我了,一个礼物都没有");
} else {
adapter.loadMoreEnd(true);

View File

@@ -10,7 +10,7 @@ import com.nnbc123.app.R;
import com.nnbc123.app.bills.adapter.NobleBillAdapter;
import com.nnbc123.app.databinding.ActivityBillsBinding;
import com.nnbc123.app.ui.widget.RecyclerViewNoBugLinearLayoutManager;
import com.nnbc123.core.Constants;
import com.nnbc123.core.CoreConstants;
import com.nnbc123.core.bills.BillModel;
import com.nnbc123.core.bills.bean.BillItemEntity;
import com.nnbc123.core.bills.bean.NobleBillListInfo;
@@ -97,7 +97,7 @@ public class BillNobleActivity extends BillBaseActivity<ActivityBillsBinding> {
public void onLoadNobleRecordSuccess(NobleBillListInfo nobleBillListInfo) {
mRefreshLayout.setRefreshing(false);
if (null != nobleBillListInfo) {
if (mCurrentCounter == Constants.PAGE_START) {
if (mCurrentCounter == CoreConstants.PAGE_START) {
hideStatus();
mBillItemEntityList.clear();
mNobleBillAdapter.setNewData(mBillItemEntityList);
@@ -139,7 +139,7 @@ public class BillNobleActivity extends BillBaseActivity<ActivityBillsBinding> {
}
}
}
if (billItemEntities.size() < Constants.BILL_PAGE_SIZE && mCurrentCounter == Constants.PAGE_START) {
if (billItemEntities.size() < CoreConstants.BILL_PAGE_SIZE && mCurrentCounter == CoreConstants.PAGE_START) {
mNobleBillAdapter.setEnableLoadMore(false);
}
mNobleBillAdapter.addData(billItemEntities);

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