This commit is contained in:
18142669586
2024-02-23 16:07:50 +08:00
commit a02f7b2e22
5737 changed files with 438436 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
{
"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":"30086000612391734",
"product_id":"99536292102564216",
"client_id":"964994320723627840",
"client_secret":"6D5FE29D85B967D3A66BDCD473641E4C7B5524F7F4935CA0EF4A842730C3402D",
"project_id":"99536292102564216",
"app_id":"106936673",
"api_key":"DAEDADYGta/0O4ZSdrnug52NgC67/w/RIyTq9A8LyAY0+mp6g6XeJDbxugpluFPLAhaqjaMs5c0PLnRx14UzWbPPADgi1EqihbWLoA==",
"package_name":"com.pandoralive.shayu"
},
"oauth_client":{
"client_id":"106936673",
"client_type":1
},
"app_info":{
"app_id":"106936673",
"package_name":"com.pandoralive.shayu"
},
"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":"com.pandoralive.shayu",
"client":{
"app_id":"106936673"
},
"app_info":{
"package_name":"com.pandoralive.shayu",
"app_id":"106936673"
},
"oauth_client":{
"client_type":1,
"client_id":"106936673"
}
}
]
}

225
common/build.gradle Normal file
View File

@@ -0,0 +1,225 @@
apply plugin: 'com.android.library'
apply plugin: 'img-optimizer'
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
manifestPlaceholders = rootProject.ext.manifestPlaceholders
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
packagingOptions {
pickFirst "lib/armeabi/libyuvutils.so"
pickFirst "lib/arm64-v8a/libyuvutils.so"
pickFirst "lib/armeabi-v7a/libyuvutils.so"
pickFirst "lib/armeabi/libyuvtools.so"
pickFirst "lib/arm64-v8a/libyuvtools.so"
pickFirst "lib/armeabi-v7a/libyuvtools.so"
exclude "lib/arm64-v8a/libmmcv_api_handgesture.so"
exclude "lib/arm64-v8a/libmmcv_api_express.so"
exclude "lib/arm64-v8a/libMediaEncoder.so"
exclude "lib/arm64-v8a/libarcore_sdk_c.so"
exclude "lib/arm64-v8a/libmediadecoder.so"
exclude "lib/arm64-v8a/libMediaMuxer.so"
exclude "lib/arm64-v8a/libarcore_sdk_jni.so"
exclude "lib/arm64-v8a/libMediaUtils.so"
exclude "lib/arm64-v8a/libcosmosffmpeg.so"
}
aaptOptions {
cruncherEnabled = false
useNewCruncher = false
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
repositories {
flatDir {
dirs 'libs', '../libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
api files('libs/jcc-bate-0.7.3.jar')
compileOnly fileTree(dir: '../libs', include: ['*.aar'])
api rootProject.ext.dependencies["appcompat-androidx"]
api rootProject.ext.dependencies["recyclerview-androidx"]
api rootProject.ext.dependencies["cardview-androidx"]
api rootProject.ext.dependencies["design"]
api rootProject.ext.dependencies["multidex"]
api "androidx.constraintlayout:constraintlayout:2.1.4"
// To use constraintlayout in compose
api "androidx.constraintlayout:constraintlayout-compose:1.0.1"
implementation 'androidx.lifecycle:lifecycle-common-java8:2.4.0'
api files('../libs/commons-io-1.4.jar')
//okHttp网络请求
api rootProject.ext.dependencies["okhttp"]
//OkGo 是对okHttp的封装
api rootProject.ext.dependencies["okgo"]
//OkGo上传下载扩展库
api rootProject.ext.dependencies["okserver"]
//fastJson解析json
api rootProject.ext.dependencies["fastjson"]
//eventbus事件总线
api rootProject.ext.dependencies["eventbus"]
//使用Glide加载图片
api rootProject.ext.dependencies["glide"]
//一个基于Glide的transformation库,拥有裁剪,着色,模糊,滤镜等多种转换效果
api rootProject.ext.dependencies["glide-transformations"]
//带圆角边框的的ImageView
api rootProject.ext.dependencies["roundedimageview"]
//gif库播放礼物gif用
api rootProject.ext.dependencies["gif-drawable"]
//svga播放器
//api rootProject.ext.dependencies["SVGAPlayer"]
implementation 'com.squareup.wire:wire-runtime:4.4.1'
//七牛云存储
api rootProject.ext.dependencies["qiniu-sdk"]
//图片裁剪
api rootProject.ext.dependencies["ucrop"]
//腾讯定位地图sdk
// api files('libs/TencentLocationSdk_v6.2.5.3.jar')
// api files('libs/TencentMapSDK_1.2.8.1.jar')
//下拉刷新上拉加载
api rootProject.ext.dependencies["smartRefreshLayout"]
//ViewPager指示器
api rootProject.ext.dependencies["magicIndicator"]
//阿里 ARouter
api rootProject.ext.dependencies["arouter"]
//轮播图
api rootProject.ext.dependencies["banner"]
//鲁班
api rootProject.ext.dependencies["Luban"]
//一个Picker控件选择日期城市用
api files('libs/AndroidPicker-1.5.6.jar')
//播放动画
api 'com.airbnb.android:lottie:2.7.0'
//引导页
api 'com.binioter:guideview:1.0.0'
//桌面app小红点
api "me.leolin:ShortcutBadger:1.1.22@aar"
//谷歌支付
//谷歌内购
//api 'com.android.billingclient:billing:5.0.0'
//api 'com.google.firebase:firebase-messaging:23.0.6'
//api 'com.google.firebase:firebase-analytics:21.1.0'
api 'com.squareup.picasso:picasso:2.5.2'
api "com.immomo.cosmos.mediax:beautyutils:2.2.1_01071700"
api files('libs/liteavsdk.jar')
api 'com.xw.repo:bubbleseekbar:3.20-lite'
//腾讯im
api 'com.tencent.imsdk:imsdk-plus:5.4.666'
api 'com.google.code.gson:gson:2.8.8'
api 'cn.rongcloud.sdk:rtc_lib:5.2.0' // 音视频通话基础能力库
//此处以集成 5.1.2 版本为例
api 'cn.rongcloud.sdk:im_lib:5.2.0.2'
//此处以集成 5.1.2 版本为例
api 'cn.rongcloud.sdk:im_kit:5.2.5.4' // 即时通讯 UI 基础组件
//融云小视频模块
api 'cn.rongcloud.sdk:sight:5.2.5.4'
api 'com.facebook.android:facebook-android-sdk:15.2.0'
implementation 'com.facebook.android:facebook-android-sdk:15.2.0'
api('com.twitter.sdk.android:twitter-core:3.1.1@aar') {
transitive = true
}
api 'com.linecorp:linesdk:5.0.1'
api 'com.android.installreferrer:installreferrer:2.2'
//Retrofit2库
api 'com.squareup.retrofit2:retrofit:2.3.0'
api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
//gson解析
api 'com.squareup.retrofit2:converter-gson:2.3.0'//混淆
implementation "io.reactivex.rxjava2:rxjava:2.2.3"//混淆
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
api 'com.jakewharton.rxbinding3:rxbinding:3.1.0'
//loading样式库
api 'com.wang.avi:library:2.1.3'
// api 'com.huawei.hms:push:4.0.2.300'
implementation 'com.github.tajchert:WaitingDots:0.6.1'
//悬浮窗
api 'com.github.princekin-f:EasyFloat:2.0.4'
api files('libs/Msc.jar')
api 'com.github.li-xiaojun:XPopup:2.10.0'
api 'com.github.shenbengit:PagerGridLayoutManager:1.1.7'
//选择器
api 'com.github.gzu-liyujiang.AndroidPicker:Common:4.1.11'
api 'com.github.gzu-liyujiang.AndroidPicker:WheelView:4.1.11'
//自定义圆角图片
api 'com.makeramen:roundedimageview:2.3.0'
// 友盟统计SDK
api 'com.umeng.umsdk:common:9.6.3'// 必选
api 'com.umeng.umsdk:asms:1.8.0'// 必选
api 'com.umeng.umsdk:uyumao:1.1.2'
//高级运营分析功能依赖库使用卸载分析、开启反作弊能力请务必集成以免影响高级功能使用。common需搭配v9.6.3及以上版本asms需搭配v1.7.0及以上版本。需更新隐私声明。
// 标准版本SudMGP SDK
api 'tech.sud.mgp:SudMGP:1.3.3.1158'
// 多语言语音识别扩展库(可选)
api 'tech.sud.mgp:SudASR:1.3.3.1158'
//侧滑删除
api 'com.yanzhenjie.recyclerview:x:1.3.2'
//华为支付插件包
//api project(':lib_huawei')
//google插件包
api project(':lib_google')
//samsung插件包
api project(':IAP6Helper')
}

View File

@@ -0,0 +1,70 @@
{
"project_info": {
"project_number": "292494634914",
"project_id": "pdlive-1631521064967",
"storage_bucket": "pdlive-1631521064967.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:292494634914:android:d8db197d7e7a6c3a3a4cfb",
"android_client_info": {
"package_name": "com.pandoralive.shayu"
}
},
"oauth_client": [
{
"client_id": "292494634914-8nuhhoeo061ki1jevbcsrl7dfdl6dlm0.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.pandoralive.shayu",
"certificate_hash": "38cc19306c9facee36a9224e9a4070bc0be15c7d"
}
},
{
"client_id": "292494634914-ctr3fptp5mkv2qqr4gkgjo9uluq2joqb.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.pandoralive.shayu",
"certificate_hash": "15fc5e70cf238323bf7111c8c627803985478e87"
}
},
{
"client_id": "292494634914-ejtqvaj86a2lldv0di2pr3d5gngprahd.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.pandoralive.shayu",
"certificate_hash": "b66dc8d21cfcf6c729577ddcf0c312b2a31ed872"
}
},
{
"client_id": "292494634914-ha2kbgtclkv20hl3a1l8r7861a1a0m5i.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyDVnuGnQzjI_vDrxh20Hv_S1OMUD7Vp3zU"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "292494634914-ha2kbgtclkv20hl3a1l8r7861a1a0m5i.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "292494634914-v9j4rei86q2pfh9as4seotb23vr2744a.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.live.pd"
}
}
]
}
}
}
],
"configuration_version": "1"
}

320
common/img_optimizer.log Normal file
View File

@@ -0,0 +1,320 @@
2019-11-01 13:59:42 info: Task optimizeCommonRelease begin:
----------------------------------------
2019-11-01 13:59:42 info: 156 images need to be optimized.
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 792B-->776B, 2.020202% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_user_dialog_home.png
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 2053B-->1428B, 30.443254% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_pyq_4.png
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 1300B-->1021B, 21.461538% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_fb_4.png
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 528B-->292B, 44.696968% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_down_arrow.png
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 372B-->366B, 1.6129032% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_user_home_follow_1.png
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 307B-->222B, 27.687296% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_user_home_follow_0.png
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 4915B-->2967B, 39.633774% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_avatar_placeholder.png
----------------------------------------
2019-11-01 13:59:42 info: Succeed! 873B-->600B, 31.271477% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_sex_male_1.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 1343B-->1058B, 21.221148% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_fb_3.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 724B-->518B, 28.45304% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_back.png
----------------------------------------
2019-11-01 13:59:43 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_pyq_2.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 2733B-->1926B, 29.52799% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_pyq_3.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 420B-->395B, 5.952381% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_fb_2.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 10738B-->5574B, 48.090893% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/bg_load_failure.png
----------------------------------------
2019-11-01 13:59:43 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_pyq_1.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 422B-->395B, 6.398104% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_fb_1.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 1105B-->743B, 32.76018% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_checked_none.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 1771B-->1523B, 14.003387% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qq_3.png
----------------------------------------
2019-11-01 13:59:43 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qzone_1.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 877B-->674B, 23.147093% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_sex_female_1.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 2270B-->1737B, 23.480177% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_chat_face.png
----------------------------------------
2019-11-01 13:59:43 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qq_2.png
----------------------------------------
2019-11-01 13:59:43 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qzone_2.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 2061B-->1577B, 23.483746% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qzone_3.png
----------------------------------------
2019-11-01 13:59:43 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qq_1.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 1793B-->1326B, 26.045732% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_chat_keyboard.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 5647B-->3110B, 44.92651% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_login_qq.png
----------------------------------------
2019-11-01 13:59:43 info: Succeed! 1562B-->1218B, 22.023046% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qq_4.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 1756B-->1269B, 27.733484% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_qzone_4.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 2174B-->2029B, 6.669733% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_live_gift_zs.png
----------------------------------------
2019-11-01 13:59:44 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_wx_2.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 2381B-->1805B, 24.191517% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_wx_3.png
----------------------------------------
2019-11-01 13:59:44 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_wx_1.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 1145B-->858B, 25.065502% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_face_delete.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 5113B-->2801B, 45.21807% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_login_fb.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 4702B-->3142B, 33.177372% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_data_empty.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 1873B-->1328B, 29.097704% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_wx_4.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 784B-->684B, 12.755102% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_cash_radio_0.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 1053B-->876B, 16.809116% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_cash_radio_1.png
----------------------------------------
2019-11-01 13:59:44 info: Succeed! 1316B-->1020B, 22.492401% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_coin_wrap_1.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_avatar_test.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_tt_1.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 1249B-->999B, 20.016012% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_coin_wrap.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_tt_2.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 1465B-->1237B, 15.56314% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_checked.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 2019B-->1621B, 19.712729% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_tt_3.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 748B-->707B, 5.481283% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_user_home_msg.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_chat_charge_pay_1.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 6476B-->3425B, 47.112415% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_login_wx.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 5688B-->3215B, 43.477497% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_login_tt.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 1679B-->1263B, 24.776653% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_share_tt_4.png
----------------------------------------
2019-11-01 13:59:45 info: Succeed! 464B-->378B, 18.534483% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-mdpi/icon_dialog_charge_close.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_014.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_028.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_029.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_015.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_001.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_017.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_003.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_002.png
----------------------------------------
2019-11-01 13:59:45 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_016.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_012.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_006.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_007.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_013.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_039.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_005.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_011.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_010.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_004.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_038.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_088.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_063.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_077.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_103.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_102.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_076.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_062.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_089.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_074.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_060.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_048.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_100.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_101.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_049.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_061.png
----------------------------------------
2019-11-01 13:59:46 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_075.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_059.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_071.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_065.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_064.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_070.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_058.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_099.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_066.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_072.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_073.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_067.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_098.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_081.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_095.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_042.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_056.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_057.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_043.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_094.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_080.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_096.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_082.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_055.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_041.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_069.png
----------------------------------------
2019-11-01 13:59:47 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_068.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_040.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_054.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_083.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_097.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_093.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_087.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_078.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_050.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_044.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_045.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_051.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_079.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_086.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_092.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_084.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_090.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_047.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_053.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_052.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_046.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_091.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_085.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_021.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_035.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_009.png
----------------------------------------
2019-11-01 13:59:48 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_008.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_034.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_020.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_036.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_022.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_023.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_037.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_033.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_027.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_026.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_032.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_018.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_024.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_030.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_031.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_025.png
----------------------------------------
2019-11-01 13:59:49 warn: Skipped! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-hdpi/face_019.png
----------------------------------------
2019-11-01 13:59:49 info: Succeed! 3193B-->2560B, 19.824615% saved! /Users/yaling/Documents/bayue/denglong_release4/common/src/main/res/mipmap-xxhdpi/loading.png
----------------------------------------
2019-11-01 13:59:49 info: Total: 156, Succeed: 41, Skipped: 115, Failed: 0, Saved: 28.5361328125KB
----------------------------------------
2019-11-01 13:59:49 info: Task optimizeCommonRelease executed successfully.
----------------------------------------

Binary file not shown.

BIN
common/libs/Msc.jar Normal file

Binary file not shown.

BIN
common/libs/PayssionSDK.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
common/libs/liteavsdk.jar Normal file

Binary file not shown.

25
common/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,25 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/macpro/Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,71 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yunbao.common">
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
<!-- <uses-permission android:name="android.permission.INTERNET" />-->
<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />-->
<application android:allowBackup="true">
<!-- <meta-data-->
<!-- android:name="com.google.ar.core"-->
<!-- android:value="optional" />-->
<activity
android:name="com.yunbao.common.activity.WebViewActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait" />
<!--Android 7.0 拍照要用这个-->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.pandoralive.shayu.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<!--
支付宝
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden"></activity>
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden"></activity>
支付宝 end
-->
<activity
android:name="com.yunbao.common.activity.ErrorActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.yunbao.common.activity.SelectImageActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.yunbao.common.activity.PreviewImageActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.yunbao.common.activity.PreviewVideoActivity"
android:screenOrientation="portrait" />
</application>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,656 @@
package com.yunbao.common;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yunbao.common.bean.ConfigBean;
import com.yunbao.common.bean.FansMedalBean;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.bean.UserItemBean;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.WordUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by cxf on 2017/8/4.
*/
public class CommonAppConfig {
//域名
public static final String HOST = getMetaDataString("SERVER_HOST");
//是否使用谷歌支付
public static final int IS_GOOGLE_PLAY = getMetaDataInt("IS_GOOGLE_PLAY");
//是否开启上报错误日志功能
public static final boolean IS_UPLOAD_ERROR_LOG = getMetaDataBoolean("IS_UPLOAD_ERROR_LOG");
//是否为插件包模式
public static final boolean IS_PLUGIN_MODEL = getMetaDataBoolean("IS_PLUGIN_MODEL");
//外部sd卡
public static final String DCMI_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
//内部存储 /data/data/<application package>/files目录
public static final String INNER_PATH = CommonAppContext.sInstance.getFilesDir().getAbsolutePath();
//文件夹名字
private static final String DIR_NAME = "yunbao";
//保存视频的时候在sd卡存储短视频的路径DCIM下
public static final String VIDEO_PATH = DCMI_PATH + "/" + DIR_NAME + "/video/";
public static final String VIDEO_RECORD_TEMP_PATH = VIDEO_PATH + "recordParts";
//下载贴纸的时候保存的路径 /storage/emulated/0/DCIM/yunbao/tieZhi/
public static final String VIDEO_TIE_ZHI_PATH = DCMI_PATH + "/" + DIR_NAME + "/tieZhi/";
//解压的美颜模型地址
public static String VIDEO_TIE_MODEl_PATH = "";
//360贴纸名字
public static final String TIEZHI_360_NAME = "sticker360";
//下载音乐的时候保存的路径
public static final String MUSIC_PATH = DCMI_PATH + "/" + DIR_NAME + "/music/";
//拍照时图片保存路径
public static final String CAMERA_IMAGE_PATH = DCMI_PATH + "/" + DIR_NAME + "/camera/";
//log保存路径
public static final String LOG_PATH = DCMI_PATH + "/" + DIR_NAME + "/log/";
public static final String GIF_PATH = INNER_PATH + "/gif/";
//QQ登录是否与PC端互通
public static final boolean QQ_LOGIN_WITH_PC = true;
//是否使用游戏
public static final boolean GAME_ENABLE = true;
//是否上下滑动切换直播间
public static final boolean LIVE_ROOM_SCROLL = false;
//直播sdk类型是否由后台控制的
public static final boolean LIVE_SDK_CHANGED = true;
//使用指定的直播sdk类型
public static final int LIVE_SDK_USED = Constants.LIVE_SDK_KSY;
private static CommonAppConfig sInstance;
public static boolean isGetNewWrap = false;//是否获取到新的包裹礼物
public static int alert_time = 1;
public static int alert_end_time = 1;
private CommonAppConfig() {
}
public static CommonAppConfig getInstance() {
if (sInstance == null) {
synchronized (CommonAppConfig.class) {
if (sInstance == null) {
sInstance = new CommonAppConfig();
}
}
}
return sInstance;
}
private String mUid;
private String mToken;
private ConfigBean mConfig;
private double mLng;
private double mLat;
private String mProvince;//省
private String mCity;//市
private String mDistrict;//区
private UserBean mUserBean;
private String mVersion;
private boolean mLoginIM;//IM是否登录了
private boolean mLaunched;//App是否启动了
private String mJPushAppKey;//极光推送的AppKey
private List<UserItemBean> mUserItemList;//个人中心功能列表
private SparseArray<FansMedalBean> mAnchorFansMedalMap;
private String mGiftListJson;
private String mWrapListJson;
private String mTxMapAppKey;//腾讯定位地图的AppKey
private String mTxMapAppSecret;//腾讯地图的AppSecret
private boolean mFrontGround;
private int mAppIconRes;
private String mAppName;
private Boolean mTiBeautyEnable;//是否使用萌颜 true使用萌颜 false 使用基础美颜
public String getUid() {
if (TextUtils.isEmpty(mUid)) {
String[] uidAndToken = SpUtil.getInstance()
.getMultiStringValue(new String[]{SpUtil.UID, SpUtil.TOKEN});
if (uidAndToken != null) {
if (!TextUtils.isEmpty(uidAndToken[0]) && !TextUtils.isEmpty(uidAndToken[1])) {
mUid = uidAndToken[0];
mToken = uidAndToken[1];
}
} else {
return "-1";
}
}
return mUid;
}
public String getToken() {
return mToken;
}
public String getCoinName() {
ConfigBean configBean = getConfig();
if (configBean != null) {
return configBean.getCoinName();
}
return Constants.DIAMONDS;
}
public String getGoldCoinName() {
ConfigBean configBean = getConfig();
if (configBean != null) {
return configBean.getGoldCoinName();
}
return Constants.GOLD_NAME;
}
public String getVotesName() {
ConfigBean configBean = getConfig();
if (configBean != null) {
return configBean.getVotesName();
}
return Constants.VOTES;
}
public ConfigBean getConfig() {
if (mConfig == null) {
String configString = SpUtil.getInstance().getStringValue(SpUtil.CONFIG);
if (!TextUtils.isEmpty(configString)) {
mConfig = JSON.parseObject(configString, ConfigBean.class);
}
}
return mConfig;
}
public void getConfig(CommonCallback<ConfigBean> callback) {
if (callback == null) {
return;
}
ConfigBean configBean = getConfig();
if (configBean != null) {
callback.callback(configBean);
} else {
CommonHttpUtil.getConfig(null, callback);
}
}
private String[][] liveType = null;
public String[][] getLiveType() {
return liveType;
}
public void setConfig(ConfigBean config) {
mConfig = config;
liveType = config.getLiveType();
}
/**
* 经度
*/
public double getLng() {
if (mLng == 0) {
String lng = SpUtil.getInstance().getStringValue(SpUtil.LOCATION_LNG);
if (!TextUtils.isEmpty(lng)) {
try {
mLng = Double.parseDouble(lng);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return mLng;
}
/**
* 纬度
*/
public double getLat() {
if (mLat == 0) {
String lat = SpUtil.getInstance().getStringValue(SpUtil.LOCATION_LAT);
if (!TextUtils.isEmpty(lat)) {
try {
mLat = Double.parseDouble(lat);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return mLat;
}
/**
* 省
*/
public String getProvince() {
if (TextUtils.isEmpty(mProvince)) {
mProvince = SpUtil.getInstance().getStringValue(SpUtil.LOCATION_PROVINCE);
}
return mProvince == null ? "" : mProvince;
}
/**
* 市
*/
public String getCity() {
if (TextUtils.isEmpty(mCity)) {
mCity = SpUtil.getInstance().getStringValue(SpUtil.LOCATION_CITY);
}
return mCity == null ? "" : mCity;
}
/**
* 区
*/
public String getDistrict() {
if (TextUtils.isEmpty(mDistrict)) {
mDistrict = SpUtil.getInstance().getStringValue(SpUtil.LOCATION_DISTRICT);
}
return mDistrict == null ? "" : mDistrict;
}
public void setUserBean(UserBean bean) {
mUserBean = bean;
}
public UserBean getUserBean() {
if (mUserBean == null) {
String userBeanJson = SpUtil.getInstance().getStringValue(SpUtil.USER_INFO);
if (!TextUtils.isEmpty(userBeanJson)) {
mUserBean = JSON.parseObject(userBeanJson, UserBean.class);
}
}
return mUserBean;
}
/**
* 设置萌颜是否可用
*/
public void setTiBeautyEnable(boolean tiBeautyEnable) {
mTiBeautyEnable = tiBeautyEnable;
SpUtil.getInstance().setBooleanValue(SpUtil.TI_BEAUTY_ENABLE, tiBeautyEnable);
}
public boolean isTiBeautyEnable() {
if (mTiBeautyEnable == null) {
mTiBeautyEnable = SpUtil.getInstance().getBooleanValue(SpUtil.TI_BEAUTY_ENABLE);
}
return mTiBeautyEnable;
}
/**
* 设置登录信息
*/
public void setLoginInfo(String uid, String token, boolean save) {
L.e("登录成功", "uid------>" + uid);
L.e("登录成功", "token------>" + token);
mUid = uid;
mToken = token;
if (save) {
Map<String, String> map = new HashMap<>();
map.put(SpUtil.UID, uid);
map.put(SpUtil.TOKEN, token);
SpUtil.getInstance().setMultiStringValue(map);
}
}
/**
* 清除登录信息
*/
public void clearLoginInfo() {
mUid = null;
mToken = null;
mLoginIM = false;
SpUtil.getInstance().removeValue(
SpUtil.UID, SpUtil.TOKEN, SpUtil.USER_INFO, SpUtil.IM_LOGIN
);
}
/**
* 设置位置信息
*
* @param lng 经度
* @param lat 纬度
* @param province 省
* @param city 市
*/
public void setLocationInfo(double lng, double lat, String province, String city, String district) {
mLng = lng;
mLat = lat;
mProvince = province;
mCity = city;
mDistrict = district;
Map<String, String> map = new HashMap<>();
map.put(SpUtil.LOCATION_LNG, String.valueOf(lng));
map.put(SpUtil.LOCATION_LAT, String.valueOf(lat));
map.put(SpUtil.LOCATION_PROVINCE, province);
map.put(SpUtil.LOCATION_CITY, city);
map.put(SpUtil.LOCATION_DISTRICT, district);
SpUtil.getInstance().setMultiStringValue(map);
}
/**
* 清除定位信息
*/
public void clearLocationInfo() {
mLng = 0;
mLat = 0;
mProvince = null;
mCity = null;
mDistrict = null;
SpUtil.getInstance().removeValue(
SpUtil.LOCATION_LNG,
SpUtil.LOCATION_LAT,
SpUtil.LOCATION_PROVINCE,
SpUtil.LOCATION_CITY,
SpUtil.LOCATION_DISTRICT);
}
public boolean isLoginIM() {
return mLoginIM;
}
public void setLoginIM(boolean loginIM) {
mLoginIM = loginIM;
}
/**
* 获取版本号
*/
public String getVersion() {
if (TextUtils.isEmpty(mVersion)) {
try {
PackageManager manager = CommonAppContext.sInstance.getPackageManager();
PackageInfo info = manager.getPackageInfo(CommonAppContext.sInstance.getPackageName(), 0);
mVersion = info.versionName;
} catch (Exception e) {
e.printStackTrace();
}
}
return mVersion;
}
/**
* 获取App名称
*/
public String getAppName() {
if (TextUtils.isEmpty(mAppName)) {
int res = CommonAppContext.sInstance.getResources().getIdentifier("app_name", "string", "myname.pdlive.shayu");
mAppName = WordUtil.getString(res);
}
return mAppName;
}
/**
* 获取App图标的资源id
*/
public int getAppIconRes() {
if (mAppIconRes == 0) {
mAppIconRes = CommonAppContext.sInstance.getResources().getIdentifier("ic_launcher", "mipmap", CommonAppContext.sInstance.getPackageName());
}
return mAppIconRes;
}
/**
* 获取MetaData中的极光AppKey
*/
public String getJPushAppKey() {
if (mJPushAppKey == null) {
mJPushAppKey = getMetaDataString("JPUSH_APPKEY");
}
return mJPushAppKey;
}
/**
* 获取MetaData中的腾讯定位地图的AppKey
*
* @return
*/
public String getTxMapAppKey() {
if (mTxMapAppKey == null) {
mTxMapAppKey = getMetaDataString("TencentMapSDK");
}
return mTxMapAppKey;
}
/**
* 获取MetaData中的腾讯定位地图的AppSecret
*
* @return
*/
public String getTxMapAppSecret() {
if (mTxMapAppSecret == null) {
mTxMapAppSecret = getMetaDataString("TencentMapAppSecret");
}
return mTxMapAppSecret;
}
private static String getMetaDataString(String key) {
String res = null;
try {
ApplicationInfo appInfo = CommonAppContext.sInstance.getPackageManager().getApplicationInfo(CommonAppContext.sInstance.getPackageName(), PackageManager.GET_META_DATA);
res = appInfo.metaData.getString(key);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Log.i("tag", "url:" + res);
return res;
}
private static boolean getMetaDataBoolean(String key) {
boolean res = false;
try {
ApplicationInfo appInfo = CommonAppContext.sInstance.getPackageManager().getApplicationInfo(CommonAppContext.sInstance.getPackageName(), PackageManager.GET_META_DATA);
res = appInfo.metaData.getBoolean(key);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return res;
}
private static int getMetaDataInt(String key) {
int res = 0;
try {
ApplicationInfo appInfo = CommonAppContext.sInstance.getPackageManager().getApplicationInfo(CommonAppContext.sInstance.getPackageName(), PackageManager.GET_META_DATA);
res = appInfo.metaData.getInt(key);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return res;
}
/**
* 个人中心功能列表
*/
public List<UserItemBean> getUserItemList() {
if (mUserItemList == null || mUserItemList.size() == 0) {
String userBeanJson = SpUtil.getInstance().getStringValue(SpUtil.USER_INFO);
if (!TextUtils.isEmpty(userBeanJson)) {
JSONObject obj = JSON.parseObject(userBeanJson);
if (obj != null) {
setUserItemList(obj.getString("list"));
}
}
}
return mUserItemList;
}
public void setUserItemList(String listString) {
UserItemBean[][] arr = JSON.parseObject(listString, UserItemBean[][].class);
if (arr != null && arr.length > 0) {
List<UserItemBean> newList = new ArrayList<>();
for (int i = 0, length1 = arr.length; i < length1; i++) {
for (int j = 0, length2 = arr[i].length; j < length2; j++) {
UserItemBean bean = arr[i][j];
if (j == length2 - 1) {
if (i < length1 - 1) {
bean.setGroupLast(true);
} else {
bean.setAllLast(true);
}
}
newList.add(bean);
}
}
mUserItemList = newList;
}
}
/**
* 保存主播粉丝徽章信息
*/
public void setAnchorFansMedal(String anchorMedalJson) {
if (TextUtils.isEmpty(anchorMedalJson)) {
return;
}
List<FansMedalBean> list = JSON.parseArray(anchorMedalJson, FansMedalBean.class);
if (list == null || list.size() == 0) {
return;
}
if (mAnchorFansMedalMap == null) {
mAnchorFansMedalMap = new SparseArray<>();
}
mAnchorFansMedalMap.clear();
for (FansMedalBean bean : list) {
mAnchorFansMedalMap.put(bean.getLevel(), bean);
}
}
/**
* 获取主播粉丝徽章信息
*/
public FansMedalBean getAnchorFansMedal(int level) {
if (mAnchorFansMedalMap == null) {
String configString = SpUtil.getInstance().getStringValue(SpUtil.CONFIG);
if (!TextUtils.isEmpty(configString)) {
JSONObject obj = JSON.parseObject(configString);
setAnchorFansMedal(obj.getString("levelfans"));
}
}
if (mAnchorFansMedalMap == null || mAnchorFansMedalMap.size() == 0) {
return null;
}
return mAnchorFansMedalMap.get(level);
}
public String getGiftListJson() {
return mGiftListJson;
}
public void setGiftListJson(String getGiftListJson) {
mGiftListJson = getGiftListJson;
}
public String getWrapListJson() {
return mWrapListJson;
}
public void setWrapListJson(String wrapListJson) {
mWrapListJson = wrapListJson;
}
/**
* 判断某APP是否安装
*/
public static boolean isAppExist(String packageName) {
if (!TextUtils.isEmpty(packageName)) {
PackageManager manager = CommonAppContext.sInstance.getPackageManager();
List<PackageInfo> list = manager.getInstalledPackages(0);
for (PackageInfo info : list) {
if (packageName.equalsIgnoreCase(info.packageName)) {
return true;
}
}
}
return false;
}
public boolean isLaunched() {
return mLaunched;
}
public void setLaunched(boolean launched) {
mLaunched = launched;
}
//app是否在前台
public boolean isFrontGround() {
return mFrontGround;
}
//app是否在前台
public void setFrontGround(boolean frontGround) {
mFrontGround = frontGround;
}
//设置美颜类型
public void setBeautySdkType(String sproutType) {
SpUtil.getInstance().setStringValue(SpUtil.BEAUTY_SDK_TYPE, sproutType);
}
public String getBeautySdkType() {
return SpUtil.getInstance().getStringValue(SpUtil.BEAUTY_SDK_TYPE);
}
//设置是否显示转盘功能
public void setTurnTableEnable(String enable) {
SpUtil.getInstance().setStringValue(SpUtil.TURNTABLE_ENABLE, enable);
}
public String getTurnTableEnable() {
return SpUtil.getInstance().getStringValue(SpUtil.TURNTABLE_ENABLE);
}
//设置360美颜贴纸下载地址
public void setBeauty360TieZhiUrl(String tieZhiUrl) {
SpUtil.getInstance().setStringValue(SpUtil.BEAUTY_360_TIEZHI_URL, tieZhiUrl);
}
public String getBeauty360TieZhiUrl() {
return SpUtil.getInstance().getStringValue(SpUtil.BEAUTY_360_TIEZHI_URL);
}
//360贴纸已经下载过
public void setBeauty360TieZhiExist(boolean isExist) {
SpUtil.getInstance().setBooleanValue(SpUtil.BEAUTY_360_TIEZHI_EXIST, isExist);
}
public boolean getBeauty360TieZhiExist() {
return SpUtil.getInstance().getBooleanValue(SpUtil.BEAUTY_360_TIEZHI_EXIST);
}
//设置主播pk时间
public void setAnchorPkTime(String pkTime) {
SpUtil.getInstance().setStringValue(SpUtil.ANCHOR_PK_TIME, pkTime);
}
public String getAnchorPkTime() {
return SpUtil.getInstance().getStringValue(SpUtil.ANCHOR_PK_TIME);
}
}

View File

@@ -0,0 +1,153 @@
package com.yunbao.common;
import static com.facebook.FacebookSdk.setAdvertiserIDCollectionEnabled;
import static com.facebook.FacebookSdk.setAutoLogAppEventsEnabled;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import androidx.multidex.MultiDex;
import androidx.multidex.MultiDexApplication;
import com.facebook.FacebookSdk;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.utils.L;
import java.lang.ref.WeakReference;
import java.util.Locale;
import io.rong.imlib.RongIMClient;
import io.rong.push.RongPushClient;
import io.rong.push.pushconfig.PushConfig;
import me.leolin.shortcutbadger.ShortcutBadger;
/**
* Created by cxf on 2017/8/3.
*/
public class CommonAppContext extends MultiDexApplication {
public static CommonAppContext sInstance;
public static WeakReference<Activity> activityWeakReference;
private int mCount;
private boolean mFront;//是否前台
public static int jpushMsgNum;
public static int Ingroup = 0;
public static String lang = "chinese";
public static boolean isReady = false;
public static String home_zdy_img_us = "";
public static String home_zdy_img_cn = "";
@Override
public void onCreate() {
super.onCreate();
sInstance = this;
//初始化Http
CommonHttpUtil.init();
// //华为推送
// PushConfig config = new PushConfig.Builder()
// .enableHWPush(true)
// .build();
// RongPushClient.setPushConfig(config); //将推送相关配置设置到 SDK
//设置新加坡融云服务器 有时候国内收不到推送是因为这个
RongIMClient.setServerInfo("navsg01.cn.ronghub.com", null);
if (CommonAppConfig.IS_GOOGLE_PLAY != 2) {
//谷歌推送
PushConfig gconfig = new PushConfig.Builder().enableFCM(true).build();
RongPushClient.setPushConfig(gconfig);
}
//初始化友盟统计
// UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, null);
FacebookSdk.sdkInitialize(getApplicationContext());
setAutoLogAppEventsEnabled(true);
FacebookSdk.fullyInitialize();
setAdvertiserIDCollectionEnabled(true);
registerActivityLifecycleCallbacks();
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = getResources().getConfiguration().getLocales().get(0);
} else {
locale = getResources().getConfiguration().locale;
}
if (locale.getLanguage().equals("zh")) {
lang = "chinese";
} else {
lang = "english";
}
Log.i("lang", lang);
}
public static Activity getTopActivity() {
if (activityWeakReference == null) {
return null;
}
return activityWeakReference.get();
}
@Override
protected void attachBaseContext(Context base) {
MultiDex.install(this);
super.attachBaseContext(base);
}
private void registerActivityLifecycleCallbacks() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
mCount++;
activityWeakReference = new WeakReference<>(activity);
if (!mFront) {
mFront = true;
L.e("AppContext------->处于前台");
ShortcutBadger.applyCount(activity, 0);
jpushMsgNum = 0;
CommonAppConfig.getInstance().setFrontGround(true);
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
mCount--;
if (mCount == 0) {
mFront = false;
L.e("AppContext------->处于后台");
CommonAppConfig.getInstance().setFrontGround(false);
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
}

View File

@@ -0,0 +1,310 @@
package com.yunbao.common;
import com.yunbao.common.bean.ChatRemarksBean;
import java.util.ArrayList;
import java.util.List;
/**
* Created by cxf on 2018/6/7.
*/
public class Constants {
public static final String NEW_ENTER_ROOM = "enterRoom";
public static final String URL = "url";
public static final String PAYLOAD = "payload";
public static final String SEX = "sex";
public static final String NICK_NAME = "nickname";
public static final String REMARKS = "remarks";
public static final String AVATAR = "avatar";
public static final String SIGN = "sign";
public static final String TO_UID = "toUid";
public static final String INTOINDEX = "intoIndex";
public static final String FROM_LIVE_ROOM = "fromLiveRoom";
public static final String TO_NAME = "toName";
public static final String STREAM = "stream";
public static final String LIMIT = "limit";
public static final String UID = "uid";
public static final String USER_NAME = "userName";//用户名
public static final String USER_ICON = "userIcon";//用户头像
public static final String TIP = "tip";
public static final String SHOW_INVITE = "showInvite";
public static final String USER_BEAN = "userBean";
public static final String CLASS_ID = "classID";
public static final String CLASS_NAME = "className";
public static final String CHECKED_ID = "checkedId";
public static final String CHECKED_COIN = "checkedCoin";
public static final String LIVE_DANMU_PRICE = "danmuPrice";
public static final String COIN_NAME = "coinName";
public static final String LIVE_BEAN = "liveBean";
public static final String LIVE_TYPE = "liveType";
public static final String LIVE_KEY = "liveKey";
public static final String LIVE_POSITION = "livePosition";
public static final String LIVE_TYPE_VAL = "liveTypeVal";
public static final String LIVE_UID = "liveUid";
public static final String LIVE_STREAM = "liveStream";
public static final String LIVE_WISH_GIFTID = "wishGiftId";
public static final String LIVE_HOME = "liveHome";
public static final String LIVE_FOLLOW = "liveFollow";
public static final String LIVE_NEAR = "liveNear";
public static final String LIVE_CLASS_PREFIX = "liveClass_";
public static final String LIVE_ADMIN_ROOM = "liveAdminRoom";
public static final String LIVE_ANCHER_NAME = "ancherName";//主播名
public static final String LIVE_ANCHER_ICON = "ancherIcon";//主播头像
public static final String HAS_GAME = "hasGame";
public static final String OPEN_FLASH = "openFlash";
public static final String SHARE_QR_CODE_FILE = "shareQrCodeFile.png";
public static final String ANCHOR = "anchor";
public static final String FOLLOW = "follow";
public static final String DIAMONDS = "钻石";
public static final String GOLD_NAME = "金币";
public static final String VOTES = "映票";
public static final String PAY_ALI_NOT_ENABLE = "支付宝未接入";
public static final String PAY_WX_NOT_ENABLE = "微信支付未接入";
public static final String PAY_ALL_NOT_ENABLE = "未开启支付";
public static final String PAY_TYPE_ALI = "ali";
public static final String PAY_TYPE_WX = "wx";
public static final String PAY_TYPE_HW = "hw";
public static final String PAY_TYPE_HFB = "hfb";
public static final String PAY_TYPE_YUNQU = "yunqu";//海外直播支付yunqu
public static final String PAY_TYPE_PAYSSION = "payssion";//payssion支付
public static final String PAY_TYPE_PAYPAL = "paypal";//paypal支付
public static final String PAY_TYPE_GOOGLE = "google";//google支付
public static final String PAY_BUY_COIN_ALI = "Charge.getAliOrder";
public static final String PAY_BUY_COIN_WX = "Charge.getWxOrder";
// public static final String PACKAGE_NAME_ALI = "com.eg.android.AlipayGphone";//支付宝的包名
public static final String PACKAGE_NAME_WX = "com.tencent.mm";//微信的包名
public static final String PACKAGE_NAME_QQ = "com.tencent.mobileqq";//QQ的包名
public static final String LAT = "lat";
public static final String LNG = "lng";
public static final String ADDRESS = "address";
public static final String SCALE = "scale";
public static final String SELECT_IMAGE_PATH = "selectedImagePath";
public static final String COPY_PREFIX = "copy://";
public static final int GUARD_TYPE_NONE = 0;
public static final int GUARD_TYPE_DAY = 1;
public static final int GUARD_TYPE_MONTH = 2;
public static final int GUARD_TYPE_YEAR = 3;
public static final String GIF_GIFT_PREFIX = "gif_gift_";
public static final String GIF_CAR_PREFIX = "gif_car_";
public static final String DOWNLOAD_MUSIC = "downloadMusic";
public static final String LINK = "link";
public static final String REPORT = "report";
public static final String SAVE = "save";
public static final String DELETE = "delete";
public static final String SHARE_FROM = "shareFrom";
public static final int SHARE_FROM_LIVE = 101;
public static final int SHARE_FROM_HOME = 102;
public static final int SETTING_MODIFY_PWD = 15;
public static final int SETTING_UPDATE_ID = 16;
public static final int SETTING_CLEAR_CACHE = 18;
public static final int SETTING_ISBLACK = 20;
public static final int SEX_MALE = 1;
public static final int SEX_FEMALE = 2;
public static final int FOLLOW_FROM_FOLLOW = 1002;
public static final int FOLLOW_FROM_FANS = 1003;
public static final int FOLLOW_FROM_SEARCH = 1004;
public static final String IM_FROM_HOME = "imFromHome";
//直播房间类型
public static final int LIVE_TYPE_NORMAL = 0;//普通房间
public static final int LIVE_TYPE_PWD = 1;//密码房间
public static final int LIVE_TYPE_PAY = 2;//收费房间
public static final int LIVE_TYPE_TIME = 3;//计时房间
public static final int LIVE_TYPE_RESTING = 4;//休息中
//主播直播间功能
public static final int LIVE_FUNC_BEAUTY = 2001;//美颜
public static final int LIVE_FUNC_CAMERA = 2002;//切换摄像头
public static final int LIVE_FUNC_FLASH = 2003;//闪光灯
public static final int LIVE_FUNC_MUSIC = 2004;//伴奏
public static final int LIVE_FUNC_SHARE = 2005;//分享
public static final int LIVE_FUNC_GAME = 2006;//游戏
public static final int LIVE_FUNC_RED_PACK = 2007;//红包
public static final int LIVE_FUNC_LINK_MIC = 2008;//连麦
public static final int LIVE_FUNC_WISHLIST = 2009;//心愿单
public static final int LIVE_FUNC_MIRROR = 2010;//鏡像
public static final int LIVE_FUNC_ZG = 2011;//鏡像
public static final int LIVE_FUNC_DR = 2012;//多人
public static final int LIVE_FUNC_MIC = 2013;//語音
public static final int LIVE_FUNC_WKS = 2014;//語音
public static final int LIVE_FUNC_ZSLK = 2015;//語音
public static final int LIVE_FUNC_RANDOM_PK = 2016;//随机PK
public static final int LIVE_ROBOT = 2017;//机器人
//socket
public static final String SOCKET_CONN = "conn";
public static final String SOCKET_BROADCAST = "broadcastingListen";
public static final String SOCKET_SEND = "broadcast";
public static final String SOCKET_STOP_PLAY = "stopplay";//超管关闭直播间
public static final String SOCKET_STOP_LIVE = "stopLive";//超管关闭直播间
public static final String SOCKET_SEND_MSG = "SendMsg";//发送文字消息,点亮,用户进房间 PS:这种混乱的设计是因为服务器端逻辑就是这样设计的,客户端无法自行修改
public static final String SOCKET_LIGHT = "light";//飘心
public static final String SOCKET_SEND_GIFT = "SendGift";//送礼物
public static final String SOCKET_ALL_SERVER_NOTIFY = "AllServerNotify";//全服通知
public static final String SOCKET_SEND_BARRAGE = "SendBarrage";//发弹幕
public static final String SOCKET_LIVE_DRPK = "LiveDRPK";//多人PK
public static final String SOCKET_LIVE_DRPK_RANDOM = "LiveRandomPK";//随机PK
public static final String SOCKET_LEAVE_ROOM = "disconnect";//用户离开房间
public static final String SOCKET_LIVE_END = "StartEndLive";//主播关闭直播
public static final String SOCKET_SYSTEM = "SystemNot";//系统消息
public static final String UP_USER_LIST = "upuserlist";//更新用戶列表
public static final String LIAN_MAI = "LivePKDRLM";//用户连麦
public static final String CARD = "card";//活动
public static final String SOCKET_KICK = "KickUser";//踢人
public static final String SOCKET_SHUT_UP = "ShutUpUser";//禁言
public static final String SOCKET_SET_ADMIN = "setAdmin";//设置或取消管理员
public static final String SOCKET_CHANGE_LIVE = "changeLive";//切换计时收费类型
public static final String SOCKET_UPDATE_VOTES = "updateVotes";//门票或计时收费时候更新主播的映票数
public static final String SOCKET_FAKE_FANS = "requestFans";//僵尸粉
public static final String SOCKET_LINK_MIC = "ConnectVideo";//连麦
public static final String SOCKET_LINK_MIC_ANCHOR = "LiveConnect";//主播连麦
public static final String SOCKET_LINK_MIC_PK = "LivePK";//主播PK
public static final String SOCKET_BUY_GUARD = "BuyGuard";//购买守护
public static final String SOCKET_RED_PACK = "SendRed";//红包
public static final String SOCKET_LUCK_WIN = "luckWin";//幸运礼物中奖
public static final String SOCKET_PRIZE_POOL_WIN = "jackpotWin";//奖池中奖
public static final String SOCKET_PRIZE_POOL_UP = "jackpotUp";//奖池升级
public static final String SOCKET_HOUR = "SendHourChart";//小时榜更新
public static final String RECOMMEND_CARD_NOTIFY = "recommendCardNotify";//推荐卡通知消息
public static final String STAR_CHALLENGE_UPDATE = "starChallengeUpdate";//星级助力
public static final String AI_AUTOMATIC_SPEECH = "aiAutomaticSpeech";//机器人助手
public static final String AI_AUTOMATIC_SPEECH_LIVE = "aiAutomaticSpeechNew";//机器人助手
public static final String STAR_CHALLENGE_UPGRADE_NOTIFY = "starChallengeUpgradeNotify";//星级挑战成功
public static final String SUPER_VISION = "supervision";//超级发言警告
public static final String PK_RANK_UPDATE = "RankingRankUpdate";//PK排位赛更新数据
public static final String CUSTOM_FULL_SERVICE_NOTIFY = "customFullServiceNotify";//全服通知
public static final String XYD_COMPLETE = "XydComplete";//心愿单完成通知
public static final String WISH_LIST_PROGRESS = "wishListProgress";//心愿单进度通知
public static final String LIVE_VOTE_CREATE = "createVote";
public static final String LIVE_VOTE_UPDATE = "updateVote";
public static final String LIVE_VOTE_END = "endVote";
public static final String LIVE_PK_END = "endPK";//结束PK以这个PK获取到的参数为准
public static final String RED_PACKET = "RedPacket";//红包通知
public static final String RED_PACKET_SUPER_JACKPOT = "RedPacketSuperJackpot";//超级红包通知
public static final String SOCKET_LIVE_MSG_TO_USER = "SendMsgToUser";//七日用户主播提示语
//游戏socket
public static final String SOCKET_GAME_ZJH = "startGame";//炸金花
public static final String SOCKET_GAME_HD = "startLodumaniGame";//海盗船长
public static final String SOCKET_GAME_NZ = "startCattleGame";//开心牛仔
public static final String SOCKET_GAME_ZP = "startRotationGame";//幸运转盘
public static final String SOCKET_GAME_EBB = "startShellGame";//二八贝
public static final String SOCKET_SEND_ACTIVE_MSG = "SendActiveMsg";//活动,聊天显示
public static final String SOCKET_PRANKTURNTABLE = "prankTurntable";//整蛊消息
public static final String SOCKET_USEHOTCARD = "UseHotCard";//热度卡消息
public static final String LOVE_CHECK = "LoveCheck";//热度卡消息
public static final String TRUMPET_NOTIFY = "TrumpetNotify";//全栈喇叭
public static final String LuckyAngel = "LuckyCheck";//幸运天使
public static final String Lucky100Check = "Lucky100Check";//幸运天使
public static final int SOCKET_WHAT_CONN = 0;
public static final int SOCKET_WHAT_DISCONN = 2;
public static final int SOCKET_WHAT_BROADCAST = 1;
//socket 用户类型
public static final int SOCKET_USER_TYPE_NORMAL = 30;//普通用户
public static final int SOCKET_USER_TYPE_ADMIN = 40;//房间管理员
public static final int SOCKET_USER_TYPE_ANCHOR = 50;//主播
public static final int SOCKET_USER_TYPE_SUPER = 60;//超管
//提现账号类型1表示支付宝2表示微信3表示银行卡
public static final int CASH_ACCOUNT_ALI = 1;
public static final int CASH_ACCOUNT_WX = 2;
public static final int CASH_ACCOUNT_BANK = 3;
public static final String CASH_ACCOUNT_ID = "cashAccountID";
public static final String CASH_ACCOUNT = "cashAccount";
public static final String CASH_ACCOUNT_TYPE = "cashAccountType";
public static final int RED_PACK_TYPE_AVERAGE = 0;//平均红包
public static final int RED_PACK_TYPE_SHOU_QI = 1;//拼手气红包
public static final int RED_PACK_SEND_TIME_NORMAL = 0;//立即发放
public static final int RED_PACK_SEND_TIME_DELAY = 1;//延时发放
public static final int JPUSH_TYPE_NONE = 0;
public static final int JPUSH_TYPE_LIVE = 1;//直播
public static final int JPUSH_TYPE_MESSAGE = 2;//消息
public static final String VIDEO_HOME = "videoHome";
public static final String VIDEO_USER = "videoUser_";
public static final String VIDEO_KEY = "videoKey";
public static final String VIDEO_POSITION = "videoPosition";
public static final String VIDEO_SINGLE = "videoSingle";
public static final String VIDEO_COMMUNITY = "community";
public static final String VIDEO_PAGE = "videoPage";
public static final String VIDEO_BEAN = "videoBean";
public static final String VIDEO_ID = "videoId";
public static final String VIDEO_COMMENT_BEAN = "videoCommnetBean";
public static final String VIDEO_FACE_OPEN = "videoOpenFace";
public static final String VIDEO_FACE_HEIGHT = "videoFaceHeight";
public static final String VIDEO_DURATION = "videoDuration";
public static final String VIDEO_PATH = "videoPath";
public static final String VIDEO_FROM_RECORD = "videoFromRecord";
public static final String VIDEO_MUSIC_BEAN = "videoMusicBean";
public static final String VIDEO_MUSIC_ID = "videoMusicId";
public static final String VIDEO_HAS_BGM = "videoHasBgm";
public static final String VIDEO_MUSIC_NAME_PREFIX = "videoMusicName_";
public static final String VIDEO_SAVE_TYPE = "videoSaveType";
public static final int VIDEO_SAVE_SAVE_AND_PUB = 1;//保存并发布
public static final int VIDEO_SAVE_SAVE = 2;//仅保存
public static final int VIDEO_SAVE_PUB = 3;//仅发布
public static final String MOB_QQ = "qq";
public static final String MOB_QZONE = "qzone";
public static final String MOB_WX = "wx";
public static final String MOB_WX_PYQ = "wchat";
public static final String MOB_FACEBOOK = "facebook";
public static final String MOB_TWITTER = "twitter";
public static final String MOB_PHONE = "phone";
public static final String LIVE_SDK = "liveSdk";
public static final String LIVE_KSY_CONFIG = "liveKsyConfig";
public static final String LIVE_PK_RANDOM_START="RankingStartRandomPK";
public static final int LIVE_SDK_KSY = 0;//金山推流
public static final int LIVE_SDK_TX = 1;//腾讯推流
public static final int LINK_MIC_TYPE_NORMAL = 0;//观众与主播连麦
public static final int LINK_MIC_TYPE_ANCHOR = 1;//主播与主播连麦
//视频举报获取位置
public static int xIndex = 0;
public static int yindex = 0;
public static String isBlack;
public static String nowPostsId = "";
public static String myAvatar = "";
public static String myUid = "";
public static String myName = "";
public static int myIntoIndex = 0;
public static String chatActionUrl = "";
public static String myUrl = "";
public static String mStream = "";
public static String nowSendUid = "";//获取当前会话新信息用于会话列表显示
public static boolean isAnchor = false;
public static String myPackageUrl = "";
public static boolean isTitle = false;
public static int isShowPage = -1;
public static boolean LoginKefu = true;//是否是从客服进入
public static String nowAnchorName = "";//当前主播昵称
public static String isSend = "1";//是否能发言enterroom接口返回1 可发言 0 不可发言
public static String nowId = "";//当前点击了某个单聊的id
public static String remarks = "";//当前点击了某个单聊的备注
public static String isAdmin = "0";//当前点击了某个单聊是否是指导员
public static List<ChatRemarksBean> remarksListNow = new ArrayList<>();//存储的备注
public static int getWeekIntIndex = 0;//是否刷新了周星列表
public static boolean isInstructor = false;//是否是管理员
public static String isSetRemark = "";//是否有修改备注
public static String isSetRemarkText = "";//修改的备注信息
public static boolean isShowLiveDialog = false;//是否在直播间打开单聊
public static int firstInto = 0;//
}

View File

@@ -0,0 +1,61 @@
package com.yunbao.common;
/**
* Created by cxf on 2018/10/15.
*/
public class HtmlConfig {
//登录即代表同意服务和隐私条款
public static final String LOGIN_PRIVCAY = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=68";
public static final String LOGIN_PRIVCAY1 = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=67";
//注册用户协议
public static final String REG_PRIVCAY1 = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=2";
public static final String REG_PRIVCAY2 = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=3";
//直播间贡献榜
public static final String LIVE_LIST = CommonAppConfig.HOST + "/index.php?g=Appapi&m=contribute&a=index&uid=";
//直播间粉丝排行榜
public static final String LIVE_FANS_MEDAL_RANKING = CommonAppConfig.HOST + "/index.php?g=Appapi&m=Fans&a=fansranking&uid=";
//个人主页分享链接
public static final String SHARE_HOME_PAGE = CommonAppConfig.HOST + "/index.php?g=Appapi&m=home&a=index&touid=";
//提现记录
public static final String CASH_RECORD = CommonAppConfig.HOST + "/index.php?g=Appapi&m=cash&a=index";
//支付宝充值回调地址
public static final String ALI_PAY_COIN_URL = CommonAppConfig.HOST + "/Appapi/Pay/notify_ali";
//谷歌支付回调地址
public static final String GOOGLE_PAY_COIN_URL = CommonAppConfig.HOST + "/Appapi/Pay/";
//视频分享地址
public static final String SHARE_VIDEO = CommonAppConfig.HOST + "/index.php?g=appapi&m=video&a=index&videoid=";
//直播间幸运礼物说明
public static final String LUCK_GIFT_TIP = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=26";
//直播间玩家看到的心愿单
public static final String WISHLIST_URL = CommonAppConfig.HOST + "/index.php?g=Appapi&m=Wish&a=index";
//直播间玩家看到的转盘
public static final String TURNTABLE_URL = CommonAppConfig.HOST + "/Appapi/Turntable/index";
//在线商城
public static final String SHOP = CommonAppConfig.HOST + "/h5/shoppingMall.html";
//社区
public static final String ENCOURAGE = CommonAppConfig.HOST + "/h5/shequ/index.html#/h5/shequ";
//个人信息
public static final String PERSONAL = CommonAppConfig.HOST + "/h5/shequ/index.html#/h5/shequ/Personal";
//我的徽章 右上角问号
public static final String MEDAL_QUESTION = CommonAppConfig.HOST + "/index.php?g=Appapi&m=Fans&a=rule&isfans=1";
//我的明细
public static final String DETAIL = CommonAppConfig.HOST + "/index.php?g=Appapi&m=Detail&a=index";
//充值协议
public static final String CHARGE_PRIVCAY = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=6";
//充值说明
public static final String CHARGE_EXPLAIN = CommonAppConfig.HOST + "/index.php?g=portal&m=page&a=index&id=41";
}

View File

@@ -0,0 +1,394 @@
package com.yunbao.common.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.umeng.analytics.MobclickAgent;
import com.yunbao.common.R;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.interfaces.LifeCycleListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.ClickUtil;
import com.yunbao.common.utils.ToastUtil;
import java.util.ArrayList;
import java.util.List;
/**
* Created by cxf on 2017/8/3.
*/
public abstract class AbsActivity extends AppCompatActivity {
protected String mTag;
protected Activity mContext;
protected List<LifeCycleListener> mLifeCycleListeners;
protected boolean isFullWindow;
@Override
public Resources getResources() {
Resources res = super.getResources();
Configuration config = new Configuration();
config.setToDefaults();
config.locale = IMLoginManager.get(this).getLocaleLanguage();
res.updateConfiguration(config, res.getDisplayMetrics());
return res;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
create();
Intent intent = getIntent();
if (intent != null) {
isFullWindow = getIntent().getBooleanExtra("isFull", false);
if (isFullWindow) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
super.onCreate(savedInstanceState);
mTag = this.getClass().getSimpleName();
setStatusBar();
setContentView(getLayoutId());
mContext = this;
mLifeCycleListeners = new ArrayList<>();
main(savedInstanceState);
if (mLifeCycleListeners != null) {
for (LifeCycleListener listener : mLifeCycleListeners) {
listener.onCreate();
}
}
}
protected abstract int getLayoutId();
protected void main(Bundle savedInstanceState) {
main();
}
protected void main() {
}
protected void create(){
}
protected boolean isStatusBarWhite() {
return false;
}
protected void setTitle(String title) {
TextView titleView = (TextView) findViewById(R.id.titleView);
if (titleView != null) {
titleView.setText(title);
}
}
public void backClick(View v) {
if (v.getId() == R.id.btn_back) {
onBackPressed();
}
}
protected boolean canClick() {
return ClickUtil.canClick();
}
/**
* 设置透明状态栏
*/
private void setStatusBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if (isStatusBarWhite()) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
} else {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(0);
}
}
@Override
protected void onDestroy() {
if (mLifeCycleListeners != null) {
for (LifeCycleListener listener : mLifeCycleListeners) {
listener.onDestroy();
}
mLifeCycleListeners.clear();
mLifeCycleListeners = null;
}
ImgLoader.clearMemory(this);
super.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
if (mLifeCycleListeners != null) {
for (LifeCycleListener listener : mLifeCycleListeners) {
listener.onStart();
}
}
}
@Override
protected void onRestart() {
super.onRestart();
if (mLifeCycleListeners != null) {
for (LifeCycleListener listener : mLifeCycleListeners) {
listener.onReStart();
}
}
}
@Override
protected void onResume() {
super.onResume();
if (mLifeCycleListeners != null) {
for (LifeCycleListener listener : mLifeCycleListeners) {
listener.onResume();
}
}
//友盟统计
// MobclickAgent.onResume(this);
MobclickAgent.onPageStart(this.mTag);
Log.e("MobclickAgent","MobclickAgent:_onResume_"+this.mTag);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPageEnd(this.mTag);
Log.e("MobclickAgent","MobclickAgent:_onPause_"+this.mTag);
if (mLifeCycleListeners != null) {
for (LifeCycleListener listener : mLifeCycleListeners) {
listener.onPause();
}
}
//友盟统计
// MobclickAgent.onPause(this);
}
@Override
protected void onStop() {
super.onStop();
if (mLifeCycleListeners != null) {
for (LifeCycleListener listener : mLifeCycleListeners) {
listener.onStop();
}
}
}
public void addLifeCycleListener(LifeCycleListener listener) {
if (mLifeCycleListeners != null && listener != null) {
mLifeCycleListeners.add(listener);
}
}
public void addAllLifeCycleListener(List<LifeCycleListener> listeners) {
if (mLifeCycleListeners != null && listeners != null) {
mLifeCycleListeners.addAll(listeners);
}
}
public void removeLifeCycleListener(LifeCycleListener listener) {
if (mLifeCycleListeners != null) {
mLifeCycleListeners.remove(listener);
}
}
//键盘遮挡问题
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
public void init() {
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
mChildOfContent = content.getChildAt(0);
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
possiblyResizeChildOfContent();
}
});
frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent
.getLayoutParams();
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView()
.getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard / 4)) {
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
} else {
frameLayoutParams.height = usableHeightSansKeyboard - getNavigationBarHeightIfRoom(mContext);
;
}
mChildOfContent.requestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
return (r.bottom - r.top);
}
public boolean checkDeviceHasNavigationBar2(Context context) {
//通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar
boolean hasMenuKey = ViewConfiguration.get(context)
.hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap
.deviceHasKey(KeyEvent.KEYCODE_BACK);
if (!hasMenuKey && !hasBackKey) {
// 做任何你需要做的,这个设备有一个导航栏
return true;
}
return false;
}
public static int getNavigationBarHeightIfRoom(Context context) {
if (navigationGestureEnabled(context)) {
return 0;
}
return getCurrentNavigationBarHeight(((Activity) context));
}
/**
* 全面屏(是否开启全面屏开关 0 关闭 1 开启)
*
* @param context
* @return
*/
public static boolean navigationGestureEnabled(Context context) {
int val = Settings.Global.getInt(context.getContentResolver(), getDeviceInfo(), 0);
return val != 0;
}
/**
* 获取设备信息目前支持几大主流的全面屏手机亲测华为、小米、oppo、魅族、vivo都可以
*
* @return
*/
public static String getDeviceInfo() {
String brand = Build.BRAND;
if (TextUtils.isEmpty(brand))
return "navigationbar_is_min";
if (brand.equalsIgnoreCase("HUAWEI")) {
return "navigationbar_is_min";
} else if (brand.equalsIgnoreCase("XIAOMI")) {
return "force_fsg_nav_bar";
} else if (brand.equalsIgnoreCase("VIVO")) {
return "navigation_gesture_on";
} else if (brand.equalsIgnoreCase("OPPO")) {
return "navigation_gesture_on";
} else {
return "navigationbar_is_min";
}
}
/**
* 非全面屏下 虚拟键实际高度(隐藏后高度为0)
*
* @param activity
* @return
*/
public static int getCurrentNavigationBarHeight(Activity activity) {
if (isNavigationBarShown(activity)) {
return getNavigationBarHeight(activity);
} else {
return 0;
}
}
/**
* 非全面屏下 虚拟按键是否打开
*
* @param activity
* @return
*/
public static boolean isNavigationBarShown(Activity activity) {
//虚拟键的view,为空或者不可见时是隐藏状态
View view = activity.findViewById(android.R.id.navigationBarBackground);
if (view == null) {
return false;
}
int visible = view.getVisibility();
if (visible == View.GONE || visible == View.INVISIBLE) {
return false;
} else {
return true;
}
}
/**
* 非全面屏下 虚拟键高度(无论是否隐藏)
*
* @param context
* @return
*/
public static int getNavigationBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
Log.i("memory", "onTrimMemory: " + level);
switch (level) {
case TRIM_MEMORY_RUNNING_CRITICAL://内存低值危险值
break;
case TRIM_MEMORY_RUNNING_LOW://内存过低
break;
}
}
public boolean isKefu(String url){
if(url.contains("kefu")){
return true;
}
if(url.contains("https://newkf.yaoulive.com/")){
return true;
}
return url.startsWith("https://kefu.yaoulive.com");
}
}

View File

@@ -0,0 +1,65 @@
package com.yunbao.common.activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.R;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
/**
* Created by cxf on 2018/8/29.
* 服务器Home.getConfig接口有时候返回的数据无法解析导致崩溃
* 这个类是用来收集服务器返回的错误的信息的
*/
public class ErrorActivity extends AbsActivity {
public static void forward(String title, String errorInfo) {
Intent intent = new Intent(CommonAppContext.sInstance, ErrorActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("title", title);
intent.putExtra("error", errorInfo);
CommonAppContext.sInstance.startActivity(intent);
}
private TextView mTextView;
private String mErrorInfo;
@Override
protected int getLayoutId() {
return R.layout.activity_error;
}
@Override
protected void main() {
Intent intent = getIntent();
String title = intent.getStringExtra("title");
mErrorInfo = intent.getStringExtra("error");
setTitle(title);
mTextView = (TextView) findViewById(R.id.text);
mTextView.setText(mErrorInfo);
findViewById(R.id.btn_copy).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
copyError();
}
});
}
private void copyError() {
if (TextUtils.isEmpty(mErrorInfo)) {
return;
}
ClipboardManager clipboardManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("text", mErrorInfo);
clipboardManager.setPrimaryClip(clipData);
ToastUtil.show(mContext.getString(R.string.copy_success));
}
}

View File

@@ -0,0 +1,102 @@
package com.yunbao.common.activity;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.yunbao.common.R;
import com.yunbao.common.bean.ImageEntity;
import com.yunbao.common.utils.PreViewImageView;
import java.util.List;
/**
* Created by Haoxuan Chen on 2019/07/14.
* Description:查看图片
*/
public class PreviewImageActivity extends AbsActivity implements ViewPager.OnPageChangeListener {
// @BindView(R.id.viewPager)
ViewPager mViewPager;
// @BindView(R.id.tv_count)
TextView mCount;
View v_back;
private List<ImageEntity> mSelectedImages;
@Override
public void main(Bundle savedInstanceState) {
mViewPager = findViewById(R.id.viewPager);
mCount = findViewById(R.id.tv_count);
v_back = findViewById(R.id.v_back);
mSelectedImages = getIntent().getParcelableArrayListExtra("preview_images");
mViewPager.setAdapter(mViewPagerAdapter);
mViewPager.addOnPageChangeListener(this);
mCount.setText(String.format("%s/%s", 1, mSelectedImages.size()));
v_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
@Override
public int getLayoutId() {
return R.layout.activity_preview_image;
}
private PagerAdapter mViewPagerAdapter = new PagerAdapter() {
@Override
public int getCount() {
return mSelectedImages.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
PreViewImageView imageView = new PreViewImageView(container.getContext());
// ImgLoader.display(imageView.getContext(), mSelectedImages.get(position).getPath(), imageView);
Glide.with(imageView.getContext())
.load(mSelectedImages.get(position).getPath())
.centerCrop()
.into(imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
};
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mCount.setText(String.format("%s/%s", (position + 1), mSelectedImages.size()));
}
@Override
public void onPageScrollStateChanged(int state) {
}
}

View File

@@ -0,0 +1,304 @@
package com.yunbao.common.activity;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.widget.RelativeLayout;
import com.tencent.rtmp.ITXVodPlayListener;
import com.tencent.rtmp.TXLiveConstants;
import com.tencent.rtmp.TXVodPlayConfig;
import com.tencent.rtmp.TXVodPlayer;
import com.tencent.rtmp.ui.TXCloudVideoView;
import com.yunbao.common.R;
import com.yunbao.common.bean.ImageEntity;
import java.util.List;
/**
* Created by Haoxuan Chen on 2022/05/4.
* Description:查看视频
*/
public class PreviewVideoActivity extends AbsActivity implements ITXVodPlayListener, View.OnClickListener {
View v_back;
private List<ImageEntity> mSelectedImages;
private TXCloudVideoView mTXCloudVideoView;
private TXVodPlayer mPlayer;
private TXVodPlayConfig mTXVodPlayConfig;
private boolean mStartPlay;
private String mCachePath;
private boolean mPaused;//生命周期暂停
private boolean mClickPaused;//点击暂停
private ObjectAnimator mPlayBtnAnimator;//暂停按钮的动画
private View mPlayBtn;
private View mVideoCover;
private ActionListener mActionListener;
@Override
public void main(Bundle savedInstanceState) {
mSelectedImages = getIntent().getParcelableArrayListExtra("preview_images");
v_back = findViewById(R.id.v_back);
mTXCloudVideoView = (TXCloudVideoView) findViewById(R.id.video_view);
v_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
playAdVideo();
}
@Override
public int getLayoutId() {
return R.layout.activity_preview_video;
}
/**
* 播放视频
*/
private void playAdVideo() {
mCachePath = mContext.getCacheDir().getAbsolutePath();
mTXCloudVideoView = (TXCloudVideoView) findViewById(R.id.video_view);
mTXCloudVideoView.setRenderMode(TXLiveConstants.RENDER_MODE_FULL_FILL_SCREEN);
mPlayer = new TXVodPlayer(mContext);
mTXVodPlayConfig = new TXVodPlayConfig();
mTXVodPlayConfig.setMaxCacheItems(15);
mTXVodPlayConfig.setProgressInterval(200);
mPlayer.setConfig(mTXVodPlayConfig);
mPlayer.setAutoPlay(true);
mPlayer.setVodListener(this);
mPlayer.setPlayerView(mTXCloudVideoView);
findViewById(R.id.root).setOnClickListener(this);
mVideoCover = findViewById(R.id.video_cover);
mPlayBtn = findViewById(R.id.btn_play);
//暂停按钮动画
mPlayBtnAnimator = ObjectAnimator.ofPropertyValuesHolder(mPlayBtn,
PropertyValuesHolder.ofFloat("scaleX", 4f, 0.8f, 1f),
PropertyValuesHolder.ofFloat("scaleY", 4f, 0.8f, 1f),
PropertyValuesHolder.ofFloat("alpha", 0f, 1f));
mPlayBtnAnimator.setDuration(150);
mPlayBtnAnimator.setInterpolator(new AccelerateInterpolator());
startPlay();
}
/**
* 开始播放
*/
public void startPlay() {
mStartPlay = false;
mClickPaused = false;
if (mVideoCover != null && mVideoCover.getVisibility() != View.VISIBLE) {
mVideoCover.setVisibility(View.VISIBLE);
}
hidePlayBtn();
String url = mSelectedImages.get(0).getPath();
if (TextUtils.isEmpty(url)) {
return;
}
if (mTXVodPlayConfig == null) {
mTXVodPlayConfig = new TXVodPlayConfig();
mTXVodPlayConfig.setMaxCacheItems(15);
mTXVodPlayConfig.setProgressInterval(200);
}
if (url.endsWith(".m3u8")) {
mTXVodPlayConfig.setCacheFolderPath(null);
} else {
mTXVodPlayConfig.setCacheFolderPath(mCachePath);
}
mPlayer.setConfig(mTXVodPlayConfig);
if (mPlayer != null) {
mPlayer.startPlay(url);
}
}
/**
* 获取到视频宽高回调
*/
public void onVideoSizeChanged(float videoWidth, float videoHeight) {
if (mTXCloudVideoView != null && videoWidth > 0 && videoHeight > 0) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mTXCloudVideoView.getLayoutParams();
int targetH = 0;
if (videoWidth / videoHeight > 0.5625f) {//横屏 9:16=0.5625
targetH = (int) (mTXCloudVideoView.getWidth() / videoWidth * videoHeight);
} else {
targetH = ViewGroup.LayoutParams.MATCH_PARENT;
}
if (targetH != params.height) {
params.height = targetH;
mTXCloudVideoView.requestLayout();
}
if (mVideoCover != null && mVideoCover.getVisibility() == View.VISIBLE) {
mVideoCover.setVisibility(View.INVISIBLE);
}
}
}
/**
* 停止播放
*/
public void stopPlay() {
if (mPlayer != null) {
mPlayer.stopPlay(false);
}
}
/**
* 循环播放
*/
private void replay() {
if (mPlayer != null) {
mPlayer.seek(0);
mPlayer.resume();
}
}
/**
* 显示开始播放按钮
*/
private void showPlayBtn() {
if (mPlayBtn != null && mPlayBtn.getVisibility() != View.VISIBLE) {
mPlayBtn.setVisibility(View.VISIBLE);
}
}
/**
* 隐藏开始播放按钮
*/
private void hidePlayBtn() {
if (mPlayBtn != null && mPlayBtn.getVisibility() == View.VISIBLE) {
mPlayBtn.setVisibility(View.INVISIBLE);
}
}
@Override
public void onClick(View v) {
int i = v.getId();
if (i == R.id.root) {
clickTogglePlay();
}
}
/**
* 点击切换播放和暂停
*/
private void clickTogglePlay() {
if (!mStartPlay) {
return;
}
if (mPlayer != null) {
if (mClickPaused) {
mPlayer.resume();
} else {
mPlayer.pause();
}
}
mClickPaused = !mClickPaused;
if (mClickPaused) {
showPlayBtn();
if (mPlayBtnAnimator != null) {
mPlayBtnAnimator.start();
}
} else {
hidePlayBtn();
}
}
/**
* 播放器事件回调
*/
@Override
public void onPlayEvent(TXVodPlayer txVodPlayer, int e, Bundle bundle) {
switch (e) {
case TXLiveConstants.PLAY_EVT_PLAY_BEGIN://加载完成,开始播放的回调
mStartPlay = true;
if (mActionListener != null) {
mActionListener.onPlayBegin();
}
break;
case TXLiveConstants.PLAY_EVT_PLAY_LOADING: //开始加载的回调
if (mActionListener != null) {
mActionListener.onPlayLoading();
}
break;
case TXLiveConstants.PLAY_EVT_PLAY_END://获取到视频播放完毕的回调
replay();
break;
case TXLiveConstants.PLAY_EVT_RCV_FIRST_I_FRAME://获取到视频首帧回调
if (mActionListener != null) {
mActionListener.onFirstFrame();
}
if (mPaused && mPlayer != null) {
mPlayer.pause();
}
break;
case TXLiveConstants.PLAY_EVT_CHANGE_RESOLUTION://获取到视频宽高回调
onVideoSizeChanged(bundle.getInt("EVT_PARAM1", 0), bundle.getInt("EVT_PARAM2", 0));
break;
}
}
@Override
public void onNetStatus(TXVodPlayer txVodPlayer, Bundle bundle) {
}
public void release() {
if (mPlayer != null) {
mPlayer.stopPlay(false);
mPlayer.setPlayListener(null);
}
mPlayer = null;
mActionListener = null;
}
public interface ActionListener {
void onPlayBegin();
void onPlayLoading();
void onFirstFrame();
}
public void setActionListener(ActionListener actionListener) {
mActionListener = actionListener;
}
/**
* 生命周期暂停
*/
public void pausePlay() {
mPaused = true;
if (!mClickPaused && mPlayer != null) {
mPlayer.pause();
}
}
/**
* 生命周期恢复
*/
public void resumePlay() {
if (mPaused) {
if (!mClickPaused && mPlayer != null) {
mPlayer.resume();
}
}
mPaused = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
release();
}
}

View File

@@ -0,0 +1,472 @@
package com.yunbao.common.activity;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Parcelable;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.adapter.ImageAdapter;
import com.yunbao.common.adapter.ImageFolderAdapter;
import com.yunbao.common.adapter.MultiTypeSupport;
import com.yunbao.common.adapter.SpaceGridItemDecoration;
import com.yunbao.common.bean.ImageEntity;
import com.yunbao.common.bean.ImageFolderEntity;
import com.yunbao.common.dialog.ImageFolderView;
import com.yunbao.common.utils.StatusBarUtil;
import com.yunbao.common.utils.TDevice;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
* Created by Chen Haoxuan on 2022/4/30.
* Description:图片选择
*/
public class SelectImageActivity extends AbsActivity implements ImageFolderView.ImageFolderViewListener, ImageAdapter.onCameraClickListener, View.OnClickListener {
// 返回选择图片列表的EXTRA_KEY
public static final String EXTRA_RESULT = "EXTRA_RESULT";
public static int MAX_SIZE = 5;
private static final int PERMISSION_REQUEST_CODE = 88;
private static final int TAKE_PHOTO = 99;
TextView mTvBack;
TextView mTvSelectCount;
RecyclerView mRvImage;
TextView mTvPhoto;
TextView mTvPreview;
ImageFolderView mImageFolderView;
View v_back;
private boolean mHasCamera = true;
//被选中图片的集合
private List<ImageEntity> mSelectedImages = new ArrayList<>();
private List<ImageEntity> mImages = new ArrayList<>();
private List<ImageFolderEntity> mImageFolders = new ArrayList<>();
private ImageAdapter mImageAdapter;
private ImageFolderAdapter mImageFolderAdapter;
private Uri mImageUri;
private File takePhotoImageFile;
private int intoIndex = 0;
@Override
public int getLayoutId() {
return R.layout.activity_select_image;
}
@Override
public void main(Bundle savedInstanceState) {
mTvBack = findViewById(R.id.tv_back);
mTvSelectCount = findViewById(R.id.tv_ok);
mRvImage = findViewById(R.id.rv);
mTvPhoto = findViewById(R.id.tv_photo);
mTvPreview = findViewById(R.id.tv_preview);
mImageFolderView = findViewById(R.id.image_folder_view);
v_back = findViewById(R.id.v_back);
//设置状态栏的颜色
StatusBarUtil.statusBarTintColor(this, ContextCompat.getColor(this, R.color.black2));
setupSelectedImages();
mRvImage.setLayoutManager(new GridLayoutManager(this, 4, LinearLayoutManager.VERTICAL, false));
mRvImage.addItemDecoration(new SpaceGridItemDecoration((int) TDevice.dipToPx(getResources(), 1)));
//异步加载图片
getSupportLoaderManager().initLoader(0, null, mLoaderCallbacks);
mImageFolderView.setListener(this);
if (intoIndex == 1) {
onCameraClick();
}
v_back.setOnClickListener(this);
mTvSelectCount.setOnClickListener(this);
mTvPhoto.setOnClickListener(this);
mTvPreview.setOnClickListener(this);
}
private void setupSelectedImages() {
Intent intent = getIntent();
ArrayList<ImageEntity> selectImages = intent.getParcelableArrayListExtra("selected_images");
intoIndex = intent.getIntExtra("intoIndex", 0);
if (selectImages == null) {
selectImages = new ArrayList<>();
}
mSelectedImages.addAll(selectImages);
String showLook = getResources().getString(R.string.preview) + "%d/";
if (intoIndex == 3) {
showLook = showLook + "1";
MAX_SIZE = 1;
mTvBack.setText(getResources().getString(R.string.video));
mTvPhoto.setText(getResources().getString(R.string.video));
} else {
showLook = showLook + "9";
MAX_SIZE = 9;
mTvBack.setText(getResources().getString(R.string.im_input_img));
mTvPhoto.setText(getResources().getString(R.string.im_input_img));
}
if (mSelectedImages.size() > 0 && mSelectedImages.size() <= MAX_SIZE) {
mTvPreview.setClickable(true);
mTvPreview.setText(String.format(showLook, mSelectedImages.size()));
mTvPreview.setTextColor(ContextCompat.getColor(SelectImageActivity.this, R.color.pk_red));
}
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.v_back) {
finish();
} else if (id == R.id.tv_ok) {
Intent intent = new Intent();
intent.putParcelableArrayListExtra(EXTRA_RESULT, (ArrayList<? extends Parcelable>) mSelectedImages);
setResult(RESULT_OK, intent);
finish();
} else if (id == R.id.tv_photo) {
if (mImageFolderView.isShowing()) {
mImageFolderView.hide();
} else {
mImageFolderView.show();
}
} else if (id == R.id.tv_preview) {
if (mSelectedImages.size() > 0) {
if (intoIndex != 3) {
Intent previewIntent = new Intent(this, PreviewImageActivity.class);
previewIntent.putParcelableArrayListExtra("preview_images", (ArrayList<? extends Parcelable>) mSelectedImages);
startActivity(previewIntent);
} else {
Intent previewIntent = new Intent(this, PreviewVideoActivity.class);
previewIntent.putParcelableArrayListExtra("preview_images", (ArrayList<? extends Parcelable>) mSelectedImages);
startActivity(previewIntent);
}
}
}
}
private void addImageFoldersToAdapter() {
if (mImageFolderAdapter == null) {
mImageFolderAdapter = new ImageFolderAdapter(this, mImageFolders, R.layout.item_list_folder);
mImageFolderView.setAdapter(mImageFolderAdapter);
} else {
mImageFolderAdapter.notifyDataSetChanged();
}
}
private void addImagesToAdapter(ArrayList<ImageEntity> images) {
mImages.clear();
mImages.addAll(images);
if (mImageAdapter == null) {
mImageAdapter = new ImageAdapter(this, mImages, mSelectedImages, mMultiTypeSupport);
mRvImage.setAdapter(mImageAdapter);
} else {
mImageAdapter.notifyDataSetChanged();
}
mImageAdapter.setSelectImageCountListener(mOnSelectImageCountListener);
mImageAdapter.setOnCameraClickListener(this);
}
private MultiTypeSupport<ImageEntity> mMultiTypeSupport = new MultiTypeSupport<ImageEntity>() {
@Override
public int getLayoutId(ImageEntity image) {
if (TextUtils.isEmpty(image.getPath())) {
return R.layout.item_list_camera;
}
return R.layout.item_list_image;
}
};
/*************************************已选择的图片回调的方法************************************************/
private ImageAdapter.onSelectImageCountListener mOnSelectImageCountListener = new ImageAdapter.onSelectImageCountListener() {
@Override
public void onSelectImageCount(int count) {
String showLook = getResources().getString(R.string.preview);
if (intoIndex == 3) {
showLook = showLook + "%d/1";
MAX_SIZE = 1;
} else {
showLook = showLook + "%d/9";
MAX_SIZE = 9;
}
if (count == 0) {
showLook = getResources().getString(R.string.preview);
mTvPreview.setClickable(false);
mTvPreview.setText(showLook);
mTvPreview.setTextColor(ContextCompat.getColor(SelectImageActivity.this, R.color.color_b14066));
} else if (count > 0 && count <= MAX_SIZE) {
mTvPreview.setClickable(true);
mTvPreview.setText(String.format(showLook, count));
mTvPreview.setTextColor(ContextCompat.getColor(SelectImageActivity.this, R.color.pk_red));
}
}
@Override
public void onSelectImageList(List<ImageEntity> images) {
mSelectedImages = images;
}
};
/*************************************异步加载相册图片************************************************/
private LoaderManager.LoaderCallbacks<Cursor> mLoaderCallbacks = new LoaderManager.LoaderCallbacks<Cursor>() {
private final String[] IMAGE_PROJECTION = {
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_ADDED,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.MINI_THUMB_MAGIC,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
//创建一个CursorLoader去异步加载相册的图片
@NonNull
@Override
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
if (intoIndex == 3) {
return new CursorLoader(SelectImageActivity.this,
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, IMAGE_PROJECTION,
null, null, IMAGE_PROJECTION[2] + " DESC");
} else {
return new CursorLoader(SelectImageActivity.this,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_PROJECTION,
null, null, IMAGE_PROJECTION[2] + " DESC");
}
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor data) {
if (data != null) {
ArrayList<ImageEntity> images = new ArrayList<>();
//是否显示照相图片
if (mHasCamera) {
//添加到第一个的位置(默认)
if (intoIndex != 3) {
images.add(new ImageEntity());
}
}
ImageFolderEntity defaultFolder = new ImageFolderEntity();
defaultFolder.setName("全部照片");
defaultFolder.setPath("");
mImageFolders.add(defaultFolder);
int count = data.getCount();
if (count > 0) {
data.moveToFirst();
do {
String path = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[0]));
String name = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[1]));
long dateTime = data.getLong(data.getColumnIndexOrThrow(IMAGE_PROJECTION[2]));
int id = data.getInt(data.getColumnIndexOrThrow(IMAGE_PROJECTION[3]));
String thumbPath = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[4]));
String bucket = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[5]));
ImageEntity image = new ImageEntity();
image.setPath(path);
image.setName(name);
image.setDate(dateTime);
image.setId(id);
image.setThumbPath(thumbPath);
image.setFolderName(bucket);
image.setFolderName(bucket);
images.add(image);
//如果是被选中的图片
if (mSelectedImages.size() > 0) {
for (ImageEntity i : mSelectedImages) {
if (i.getPath().equals(image.getPath())) {
image.setSelect(true);
}
}
}
//设置图片分类的文件夹
File imageFile = new File(path);
File folderFile = imageFile.getParentFile();
ImageFolderEntity folder = new ImageFolderEntity();
folder.setName(folderFile.getName());
folder.setPath(folderFile.getAbsolutePath());
//ImageFolder复写了equal方法equal方法比较的是文件夹的路径
if (!mImageFolders.contains(folder)) {
folder.getImages().add(image);
//默认相册封面
folder.setAlbumPath(image.getPath());
mImageFolders.add(folder);
} else {
ImageFolderEntity imageFolder = mImageFolders.get(mImageFolders.indexOf(folder));
imageFolder.getImages().add(image);
}
} while (data.moveToNext());
}
addImagesToAdapter(images);
//全部照片
defaultFolder.getImages().addAll(images);
if (mHasCamera) {
defaultFolder.setAlbumPath(images.size() > 1 ? images.get(1).getPath() : null);
} else {
defaultFolder.setAlbumPath(images.size() > 0 ? images.get(0).getPath() : null);
}
//删除掉不存在的,在于用户选择了相片,又去相册删除
if (mSelectedImages.size() > 0) {
List<ImageEntity> rs = new ArrayList<>();
for (ImageEntity i : mSelectedImages) {
File f = new File(i.getPath());
if (!f.exists()) {
rs.add(i);
}
}
mSelectedImages.removeAll(rs);
}
}
mImageFolderView.setImageFolders(mImageFolders);
addImageFoldersToAdapter();
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
}
};
@Override
public void onSelectFolder(ImageFolderView imageFolderView, ImageFolderEntity imageFolder) {
addImagesToAdapter(imageFolder.getImages());
mRvImage.scrollToPosition(0);
mTvPhoto.setText(imageFolder.getName());
}
@Override
public void onDismiss() {
}
@Override
public void onShow() {
}
/*************************************相机拍照************************************************/
@Override
public void onCameraClick() {
//首先申请下相机权限
int isPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
if (isPermission == PackageManager.PERMISSION_GRANTED) {
takePhoto();
} else {
//申请权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
takePhoto();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CODE);
Toast.makeText(this, "需要您的相机权限!", Toast.LENGTH_SHORT).show();
}
}
}
private void takePhoto() {
//用来打开相机的Intent
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//这句作用是如果没有相机则该应用不会闪退,要是不加这句则当系统没有相机应用的时候该应用会闪退
if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
takePhotoImageFile = createImageFile();
if (takePhotoImageFile != null) {
Log.i("take photo", "ImageFilePath=" + takePhotoImageFile.getAbsolutePath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
///7.0以上要通过FileProvider将File转化为Uri
mImageUri = FileProvider.getUriForFile(this, this.getPackageName() + ".fileprovider", takePhotoImageFile);
} else {
//7.0以下则直接使用Uri的fromFile方法将File转化为Uri
mImageUri = Uri.fromFile(takePhotoImageFile);
}
//将用于输出的文件Uri传递给相机
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
//启动相机
startActivityForResult(takePhotoIntent, TAKE_PHOTO);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == TAKE_PHOTO) {
galleryAddPictures();
try {
Bitmap bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(mImageUri));
Log.i("take photo", bitmap + "");
} catch (Exception e) {
e.printStackTrace();
}
}
}
private File createImageFile() {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
String imageFileName = "BEMS_APP_IMG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = null;
try {
imageFile = File.createTempFile(imageFileName, ".jpg", storageDir);
} catch (IOException e) {
e.printStackTrace();
}
return imageFile;
}
/**
* 将拍的照片添加到相册
*/
private void galleryAddPictures() {
//把文件插入到系统图库
try {
MediaStore.Images.Media.insertImage(this.getContentResolver(),
takePhotoImageFile.getAbsolutePath(), takePhotoImageFile.getName(), null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//通知图库更新
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(takePhotoImageFile));
sendBroadcast(mediaScanIntent);
}
}

View File

@@ -0,0 +1,468 @@
package com.yunbao.common.activity;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import androidx.annotation.RequiresApi;
import com.alibaba.fastjson.JSON;
import com.lxj.xpopup.XPopup;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.Constants;
import com.yunbao.common.R;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.event.JavascriptInterfaceEvent;
import com.yunbao.common.event.LiveRoomChangeEvent;
import com.yunbao.common.http.LiveHttpUtil;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.AndroidBug5497Workaround;
import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DeviceUtils;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.JavascriptInterfaceUtils;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.LiveRoomCheckLivePresenter;
import com.yunbao.common.utils.MicStatusManager;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.HintCustomPopup;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.Locale;
import java.util.Stack;
/**
* Created by cxf on 2018/9/25.
*/
public class WebViewActivity extends AbsActivity {
private FrameLayout ft_title;
private ImageView btnEdit;
private ProgressBar mProgressBar;
private WebView mWebView;
private final int CHOOSE = 100;//Android 5.0以下的
private final int CHOOSE_ANDROID_5 = 200;//Android 5.0以上的
private ValueCallback<Uri> mValueCallback;
private ValueCallback<Uri[]> mValueCallback2;
private int indexInto = 0;
private View v_spacing;
@Override
protected int getLayoutId() {
return R.layout.activity_webview;
}
@Override
protected void main() {
String url = getIntent().getStringExtra(Constants.URL);
if(StringUtil.isEmpty(url)){
url="";
}
L.e("H5--->" + url);
if(isKefu(url)){
RouteUtil.forwardCustomerService(url);
finish();
return;
}
Bus.getOn(this);
LinearLayout rootView = (LinearLayout) findViewById(R.id.rootView);
mProgressBar = (ProgressBar) findViewById(R.id.progressbar);
btnEdit = (ImageView) findViewById(R.id.btn_edit);
ft_title = (FrameLayout) findViewById(R.id.ft_title);
v_spacing = (View) findViewById(R.id.v_spacing);
mWebView = findViewById(R.id.webView);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params.topMargin = DpUtil.dp2px(1);
// mWebView.setLayoutParams(params);
//mWebView.setOverScrollMode(View.OVER_SCROLL_NEVER);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
L.e("H5-------->" + url);
if(isKefu(url)){
RouteUtil.forwardCustomerService(url);
return true;
}
if (url.startsWith(Constants.COPY_PREFIX)) {
String content = url.substring(Constants.COPY_PREFIX.length());
if (!TextUtils.isEmpty(content)) {
copy(content);
}
} else {
view.loadUrl(url);
}
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
setTitle(view.getTitle());
}
}, 500);
if (url.contains("for")) {
mWebView.loadUrl("javascript:goAnchorTab()");
}
//真实屏幕高度-(ft_title的高度+导航栏高度)
//屏蔽掉是因为在线客服页面 AndroidBug5497Workaround会失效
int height = DeviceUtils.getScreenRealHeight(mContext) - DpUtil.dp2px(72) - getCurrentNavigationBarHeight(mContext);
if (!navigationGestureEnabled(mContext)) {
view.loadUrl("javascript:window.androidObject.setHeight(" + height + ",0,false)");
}
}
});
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
mProgressBar.setVisibility(View.GONE);
} else {
mProgressBar.setProgress(newProgress);
}
}
//以下是在各个Android版本中 WebView调用文件选择器的方法
// For Android < 3.0
public void openFileChooser(ValueCallback<Uri> valueCallback) {
openImageChooserActivity(valueCallback);
}
// For Android >= 3.0
public void openFileChooser(ValueCallback valueCallback, String acceptType) {
openImageChooserActivity(valueCallback);
}
//For Android >= 4.1
public void openFileChooser(ValueCallback<Uri> valueCallback,
String acceptType, String capture) {
openImageChooserActivity(valueCallback);
}
// For Android >= 5.0
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView,
ValueCallback<Uri[]> filePathCallback,
FileChooserParams fileChooserParams) {
mValueCallback2 = filePathCallback;
Intent intent = fileChooserParams.createIntent();
startActivityForResult(intent, CHOOSE_ANDROID_5);
return true;
}
});
mWebView.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext(mContext, mWebView).setPageClose(true).setLiveZhuangBana(false), "androidObject");
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
String appCachePath = mContext.getCacheDir().getAbsolutePath();
// mWebView.getSettings().setAppCachePath(appCachePath);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setUseWideViewPort(true); // 关键点
mWebView.getSettings().setAllowFileAccess(true); // 允许访问文件
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
mWebView.loadUrl(url);
AndroidBug5497Workaround.assistActivity(mWebView);
if (Constants.myIntoIndex == 2) {
ft_title.setVisibility(View.GONE);
btnEdit.setVisibility(View.GONE);
v_spacing.setVisibility(View.VISIBLE);
} else if (Constants.myIntoIndex == 1) {
v_spacing.setVisibility(View.GONE);
} else {
btnEdit.setVisibility(View.GONE);
ft_title.setVisibility(View.VISIBLE);
v_spacing.setVisibility(View.GONE);
}
}
private void openImageChooserActivity(ValueCallback<Uri> valueCallback) {
mValueCallback = valueCallback;
Intent intent = new Intent();
if (Build.VERSION.SDK_INT < 19) {
intent.setAction(Intent.ACTION_GET_CONTENT);
} else {
intent.setAction(Intent.ACTION_PICK);
intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, mContext.getString(R.string.choose_flie)), CHOOSE);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode) {
case CHOOSE://5.0以下选择图片后的回调
processResult(resultCode, intent);
break;
case CHOOSE_ANDROID_5://5.0以上选择图片后的回调
processResultAndroid5(resultCode, intent);
break;
}
}
private void processResult(int resultCode, Intent intent) {
if (mValueCallback == null) {
return;
}
if (resultCode == RESULT_OK && intent != null) {
Uri result = intent.getData();
mValueCallback.onReceiveValue(result);
} else {
mValueCallback.onReceiveValue(null);
}
mValueCallback = null;
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void processResultAndroid5(int resultCode, Intent intent) {
if (mValueCallback2 == null) {
return;
}
if (resultCode == RESULT_OK && intent != null) {
mValueCallback2.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));
} else {
mValueCallback2.onReceiveValue(null);
}
mValueCallback2 = null;
}
private static boolean mIsLive = false;
public static void forward(Context context, String url, boolean addArgs, boolean isLive) {
mIsLive = isLive;
if (Constants.LoginKefu) {
if (addArgs) {
url += "&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&isZh=" + (WordUtil.isNewZh() ? "1" : 0);
}
}
Intent intent = new Intent(context, WebViewActivity.class);
intent.putExtra(Constants.URL, url + "&isZh=" + ((IMLoginManager.get(CommonAppContext.sInstance.getBaseContext()).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0"));
context.startActivity(intent);
}
public static void forward(Context context, String url, boolean isLive) {
forward(context, url, true, isLive);
}
@Override
protected void onDestroy() {
if (mWebView != null) {
ViewGroup parent = (ViewGroup) mWebView.getParent();
if (parent != null) {
parent.removeView(mWebView);
}
mWebView.destroy();
}
Constants.myIntoIndex = 0;
indexInto = 0;
Constants.LoginKefu = true;
Bus.getOff(this);
super.onDestroy();
}
/**
* 复制到剪贴板
*/
private void copy(String content) {
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("text", content);
cm.setPrimaryClip(clipData);
ToastUtil.show(getString(R.string.copy_success));
}
@Override
protected void onResume() {
super.onResume();
if (Constants.myIntoIndex == 2 && mWebView != null && indexInto == 1) {
if (Build.VERSION.SDK_INT >= 21) {
mWebView.post(new Runnable() {
@Override
public void run() {
String method = "reload()";//拼接参数就可以把数据传递给js
mWebView.evaluateJavascript(method, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
// Log.i("qcl0228", "js返回的数据" + value);
}
});
}
});
} else {
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.loadUrl("javascript:reload()");
}
});
}
});
}
indexInto = 0;
}
if (Constants.isShowPage != -1) {
finish();
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onJavascriptInterfaceEvent(JavascriptInterfaceEvent event) {
indexInto = event.getIndexInto();
if (event.getMethod().equals("androidInviteShare")) {
try {
Class<?> clz = mContext.getClassLoader().loadClass("com.yunbao.share.ui.InvitePopDialog");
Object invite = clz.getConstructor(Context.class).newInstance(mContext);
invite = invite.getClass().getMethod("setUrl", String.class).invoke(invite, event.getData());
assert invite != null;
invite.getClass().getMethod("showDialog").invoke(invite);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else if (TextUtils.equals(event.getMethod(), "clickLogOffAccount")) {
new XPopup.Builder(mContext)
.asCustom(new HintCustomPopup(mContext,
mContext.getString(R.string.delete_account1),
mContext.getString(R.string.delete_account2))
.setLiveOpenOk(mContext.getString(R.string.delete_account3))
.setLiveOpenCancel(mContext.getString(R.string.cancel))
.setCallBack(new HintCustomPopup.HintCustomCallBack() {
@Override
public void onSure() {
LiveNetManager.get(mContext).
setLogOff(new HttpCallback<String>() {
@Override
public void onSuccess(String data) {
Stack<Activity> allActivityStacks = AppManager.getInstance().getAllActivityStacks();
for (int i = 0; i < allActivityStacks.size(); i++) {
if (!(allActivityStacks.get(i) instanceof WebViewActivity)) {
allActivityStacks.get(i).finish();
}
}
IMLoginManager.get(mContext).logout(mContext);
CommonAppConfig.getInstance().clearLoginInfo();
mContext.finish();
RouteUtil.forwardLoginActivity();
}
@Override
public void onError(String error) {
}
});
}
@Override
public void onCancel() {
}
}))
.show();
} else if (TextUtils.equals(event.getMethod(), "androidMethodLookToLive")) {
//看直播
gotoLive(event.getLiveId());
}else if (TextUtils.equals(event.getMethod(), "androidtoCommunityVideo")) {
RouteUtil.forwardCommunityActivity();
}
}
private void gotoLive(final String live_id) {
LiveHttpUtil.getLiveInfo(live_id, new com.yunbao.common.http.HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0) {
LiveBean liveBean = JSON.parseObject(info[0], LiveBean.class);
new LiveRoomCheckLivePresenter(mContext, liveBean.getUid(), liveBean.getStream(), new LiveRoomCheckLivePresenter.NewActionListener() {
@Override
public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk) {
if (liveBean == null) {
return;
}
if (MicStatusManager.getInstance().isMic(liveUid)) {
MicStatusManager.getInstance().showDownMicDialog(mContext);
return;
}
if (mIsLive) {
finish();
if (MicStatusManager.getInstance().isMic(liveUid)) {
MicStatusManager.getInstance().showDownMicDialog(mContext);
return;
}
EventBus.getDefault().post(new LiveRoomChangeEvent(liveBean, liveType, Integer.parseInt(liveTypeVal)));
} else {
RouteUtil.forwardLiveAudienceActivity(liveBean, liveType, Integer.parseInt(liveTypeVal), Integer.parseInt(liveSdk));
}
finish();
}
@Override
public void onCheckError(String contextError) {
}
});
} else {
RouteUtil.forwardUserHome(mContext, live_id, 0);
}
}
});
}
@Override
protected void onPause() {
super.onPause();
}
}

View File

@@ -0,0 +1,41 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.UserMedalModel;
import com.yunbao.common.views.AchievementDetailsViewHolder;
import java.util.ArrayList;
import java.util.List;
public class AchievementDetailsAdapter extends RecyclerView.Adapter {
private List<UserMedalModel> dressInfo = new ArrayList<>();
public AchievementDetailsAdapter(List<UserMedalModel> dressInfo) {
this.dressInfo = dressInfo;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_achievement_details, parent, false);
return new AchievementDetailsViewHolder(herdView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
AchievementDetailsViewHolder achievementDetailsViewHolder = (AchievementDetailsViewHolder) holder;
achievementDetailsViewHolder.showData(dressInfo.get(position));
}
@Override
public int getItemCount() {
return dressInfo.size();
}
}

View File

@@ -0,0 +1,41 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.playerObject;
import com.yunbao.common.views.AvatarListViewHolder;
import java.util.ArrayList;
import java.util.List;
public class AvatarListAdapter extends RecyclerView.Adapter {
private List<playerObject> playerObjects = new ArrayList<>();
public AvatarListAdapter(List<playerObject> playerObjects) {
this.playerObjects = playerObjects;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_sud_avatar_list_view, parent, false);
return new AvatarListViewHolder(runGamesView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
AvatarListViewHolder avatarListViewHolder = (AvatarListViewHolder) holder;
avatarListViewHolder.setData(playerObjects.get(position));
}
@Override
public int getItemCount() {
return playerObjects.size();
}
}

View File

@@ -0,0 +1,136 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
import com.yunbao.common.bean.CoinBean;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.R;
import java.util.List;
/**
* Created by cxf on 2019/4/22.
*/
public class ChatChargeCoinAdapter extends RecyclerView.Adapter<ChatChargeCoinAdapter.Vh> {
private List<CoinBean> mList;
private LayoutInflater mInflater;
private String mCoinName;
private String mGoldCoinName;
private String mGiveString;
private Drawable mCheckedDrawable;
private Drawable mUnCheckedDrawable;
private int mCheckedPosition;
private View.OnClickListener mOnClickListener;
private OnItemClickListener<CoinBean> mOnItemClickListener;
public ChatChargeCoinAdapter(Context context, List<CoinBean> list) {
mInflater = LayoutInflater.from(context);
mList = list;
mCoinName = CommonAppConfig.getInstance().getCoinName();
mGoldCoinName = CommonAppConfig.getInstance().getGoldCoinName();
mGiveString = context.getString(R.string.coin_give);
mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag == null) {
return;
}
int positon = (int) tag;
CoinBean bean = mList.get(positon);
if (mCheckedPosition != positon) {
if (mCheckedPosition >= 0 && mCheckedPosition < mList.size()) {
mList.get(mCheckedPosition).setChecked(false);
notifyItemChanged(mCheckedPosition, Constants.PAYLOAD);
}
bean.setChecked(true);
notifyItemChanged(positon, Constants.PAYLOAD);
mCheckedPosition = positon;
}
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(bean, positon);
}
}
};
mCheckedDrawable = ContextCompat.getDrawable(context, R.drawable.bg_coin_item_1);
mUnCheckedDrawable = ContextCompat.getDrawable(context, R.drawable.bg_coin_item_0);
}
@NonNull
@Override
public Vh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new Vh(mInflater.inflate(R.layout.item_coin, parent, false));
}
@Override
public void onBindViewHolder(@NonNull Vh holder, int position) {
}
@Override
public void onBindViewHolder(@NonNull Vh vh, int position, @NonNull List<Object> payloads) {
Object payload = payloads.size() > 0 ? payloads.get(0) : null;
vh.setData(mList.get(position), position, payload);
}
@Override
public int getItemCount() {
return mList.size();
}
class Vh extends RecyclerView.ViewHolder {
TextView mCoin;
TextView mMoney;
TextView mGive;
View mGiveGroup;
View mBg;
public Vh(View itemView) {
super(itemView);
mCoin = itemView.findViewById(R.id.coin);
mMoney = itemView.findViewById(R.id.money);
mGive = itemView.findViewById(R.id.give);
mGiveGroup = itemView.findViewById(R.id.give_group);
mBg = itemView.findViewById(R.id.bg);
itemView.setOnClickListener(mOnClickListener);
}
void setData(CoinBean bean, int position, Object payload) {
if (payload == null) {
itemView.setTag(position);
mCoin.setText(bean.getCoin());
mMoney.setText("" + bean.getMoney());
if (!"0".equals(bean.getGive())) {
if (mGiveGroup.getVisibility() != View.VISIBLE) {
mGiveGroup.setVisibility(View.VISIBLE);
}
mGive.setText(mGiveString + bean.getGive() + mGoldCoinName);
} else {
if (mGiveGroup.getVisibility() == View.VISIBLE) {
mGiveGroup.setVisibility(View.INVISIBLE);
}
}
}
mBg.setBackground(bean.isChecked() ? mCheckedDrawable : mUnCheckedDrawable);
}
}
public void setOnItemClickListener(OnItemClickListener<CoinBean> onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
}

View File

@@ -0,0 +1,156 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.yunbao.common.Constants;
import com.yunbao.common.bean.CoinPayBean;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.R;
import java.util.List;
/**
* Created by cxf on 2019/4/22.
*/
public class ChatChargePayAdapter extends RecyclerView.Adapter<ChatChargePayAdapter.Vh> {
private Context mContext;
private List<CoinPayBean> mList;
private LayoutInflater mInflater;
private Drawable mCheckedDrawable;
private int mCheckedPosition;
private View.OnClickListener mOnClickListener;
public ChatChargePayAdapter(Context context, List<CoinPayBean> list) {
mContext = context;
mInflater = LayoutInflater.from(context);
mList = list;
mCheckedPosition = 0;
mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag == null) {
return;
}
int positon = (int) tag;
CoinPayBean bean = mList.get(positon);
if (mCheckedPosition != positon) {
if (mCheckedPosition >= 0 && mCheckedPosition < mList.size()) {
mList.get(mCheckedPosition).setChecked(false);
notifyItemChanged(mCheckedPosition, Constants.PAYLOAD);
}
bean.setChecked(true);
notifyItemChanged(positon, Constants.PAYLOAD);
mCheckedPosition = positon;
}
}
};
// mCheckedDrawable = ContextCompat.getDrawable(context, R.drawable.icon_chat_charge_pay_1);
mCheckedDrawable = ContextCompat.getDrawable(context, R.mipmap.icon_coin_wrap);
}
public CoinPayBean getCheckedPayBean() {
if (mList != null && mCheckedPosition >= 0 && mCheckedPosition < mList.size()) {
return mList.get(mCheckedPosition);
}
return null;
}
@NonNull
@Override
public Vh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new Vh(mInflater.inflate(R.layout.item_chat_charge_pay2, parent, false));
}
@Override
public void onBindViewHolder(@NonNull Vh holder, int position) {
}
@Override
public void onBindViewHolder(@NonNull Vh vh, int position, @NonNull List<Object> payloads) {
Object payload = payloads.size() > 0 ? payloads.get(0) : null;
vh.setData(mList.get(position), position, payload);
}
@Override
public int getItemCount() {
return mList.size();
}
class Vh extends RecyclerView.ViewHolder {
ImageView mThumb;
TextView mName;
ImageView mImg;
TextView mGive;
View mGiveGroup;
ImageView mWrap;
View viewLine;
public Vh(View itemView) {
super(itemView);
mThumb = itemView.findViewById(R.id.thumb);
mName = itemView.findViewById(R.id.name);
mImg = itemView.findViewById(R.id.img);
mGive = itemView.findViewById(R.id.give);
mGiveGroup = itemView.findViewById(R.id.give_group);
mWrap = itemView.findViewById(R.id.wrap);
viewLine = itemView.findViewById(R.id.viewLine);
itemView.setOnClickListener(mOnClickListener);
}
void setData(CoinPayBean bean, int position, Object payload) {
if (payload == null) {
itemView.setTag(position);
ImgLoader.display(mContext, bean.getThumb(), mThumb);
//大额
if (bean.getPayDesc()!=null && !bean.getPayDesc().isEmpty()){
mGiveGroup.setVisibility(View.VISIBLE);
mGive.setText(bean.getPayDesc());
}else {
mGiveGroup.setVisibility(View.GONE);
mGive.setText("");
}
if (bean.getId().equals(Constants.PAY_TYPE_PAYSSION)){
mName.setText(bean.getName());
mName.setTextColor(Color.parseColor("#323232"));
// mName.setText(bean.getName()+" (推荐)");
// mName.setTextColor(Color.parseColor("#ff6131"));
}
else {
mName.setText(bean.getName());
mName.setTextColor(Color.parseColor("#323232"));
}
}
if (bean.isChecked()) {
if (mWrap.getVisibility() != View.VISIBLE) {
mWrap.setVisibility(View.VISIBLE);
}
viewLine.setVisibility(View.GONE);
} else {
if (mWrap.getVisibility() == View.VISIBLE) {
mWrap.setVisibility(View.INVISIBLE);
}
viewLine.setVisibility(View.VISIBLE);
}
// mImg.setImageDrawable(bean.isChecked() ? mCheckedDrawable : null);
}
}
}

View File

@@ -0,0 +1,85 @@
package com.yunbao.common.adapter;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by Chen Haoxuan on 2022/4/30.
*/
public abstract class CommonRecycleAdapter<T> extends RecyclerView.Adapter<CommonViewHolder> {
private int mLayoutId;
private List<T> mData;
private LayoutInflater mInflater;
private OnItemClickListener mItemClickListener;
private MultiTypeSupport mTypeSupport;
public CommonRecycleAdapter(Context context, List<T> mData, int layoutId) {
this.mData = mData;
this.mLayoutId = layoutId;
mInflater = LayoutInflater.from(context);
}
public CommonRecycleAdapter(Context context, List<T> mData, MultiTypeSupport typeSupport) {
this(context, mData, -1);
this.mTypeSupport = typeSupport;
}
@NonNull
@Override
public CommonViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (mTypeSupport != null) {
//多布局
mLayoutId = viewType;
}
View itemView = mInflater.inflate(mLayoutId, parent, false);
return new CommonViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull CommonViewHolder holder, final int position) {
convert(holder, mData.get(position), position);
if (mItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mItemClickListener.onItemClick(position);
}
});
}
}
@Override
public int getItemCount() {
return mData.size();
}
@Override
public int getItemViewType(int position) {
//多布局
if (mTypeSupport != null) {
return mTypeSupport.getLayoutId(mData.get(position));
}
return super.getItemViewType(position);
}
@Override
public long getItemId(int position) {
return position;
}
//点击事件
public void setItemClickListener(OnItemClickListener itemClickListener) {
this.mItemClickListener = itemClickListener;
}
protected abstract void convert(CommonViewHolder holder, T t, int position);
}

View File

@@ -0,0 +1,101 @@
package com.yunbao.common.adapter;
import androidx.recyclerview.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
/**
* Created by zhiwenyan on 5/25/17.
* <p>
* 通用的ViewHolder
*/
public class CommonViewHolder extends RecyclerView.ViewHolder {
//用于缓存View
private SparseArray<View> mView;
public CommonViewHolder(View itemView) {
super(itemView);
mView = new SparseArray<>();
}
public <T extends View> T getView(int viewId) {
View view = mView.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
mView.put(viewId, view);
}
return (T) view;
}
//通用的setText进行封装
/**
* @param viewId
* @param text
* @return
*/
public CommonViewHolder setText(int viewId, CharSequence text) {
TextView tv = getView(viewId);
tv.setText(text);
return this;
}
/**
* 本地图片
*
* @param viewId
* @param resourceId
* @return
*/
public CommonViewHolder setImageResoucrce(int viewId, int resourceId) {
ImageView iv = getView(viewId);
iv.setImageResource(resourceId);
return this;
}
/**
* 网络图片处理
*
* @param viewId
* @param imageLoader
* @return
*/
public CommonViewHolder setImagePath(int viewId, HolderImageLoader imageLoader) {
ImageView iv = getView(viewId);
imageLoader.loadImage(iv, imageLoader.getPath());
return this;
}
abstract static class HolderImageLoader {
private String path;
public HolderImageLoader(String path) {
this.path = path;
}
/**
* 加载图片
*
* @param imageView
* @param path
*/
abstract void loadImage(ImageView imageView, String path);
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
}

View File

@@ -0,0 +1,194 @@
package com.yunbao.common.adapter;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.AnchorRecommendModel;
import com.yunbao.common.bean.CustomSidebarInfoModel;
import com.yunbao.common.http.main.MainNetManager;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.DrawerRecommendViewHolder;
import com.yunbao.common.views.DrawerTaskViewHolder;
import com.yunbao.common.views.FunGamesViewHolder;
import com.yunbao.common.views.InteractionGamesViewHolder;
import com.yunbao.common.views.RecommendViewHolder;
import com.yunbao.common.views.RigtsInterestsViewHolder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 新侧边栏适配器
*/
public class CustomDrawerPopupAdapter extends RecyclerView.Adapter {
private Context mContext;
// "type": 1,//模块类型 1 充值送好礼类型2 任务中心类型 3趣味游戏类4 权益 ,5为你推荐
private final int GOOD_GIFTS = 1;
private final int TASK_CENTER = 2;
private final int FUN_GAMES = 3;
private final int RIGHTS_INTERESTS = 4;
private final int RECOMMEND = 5;
private String liveId;
private List<AnchorRecommendItemModel> list = new ArrayList<>();
private List<CustomSidebarInfoModel> infoModels = new ArrayList<>();
public CustomDrawerPopupAdapter(Context mContext) {
this.mContext = mContext;
}
public CustomDrawerPopupAdapter setLiveId(String liveId) {
this.liveId = liveId;
return this;
}
public CustomDrawerPopupAdapter setList(List<AnchorRecommendItemModel> list) {
this.list = list;
return this;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
switch (viewType) {
case GOOD_GIFTS:
View goodGiftsView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_good_gifts, parent, false);
return new DrawerRecommendViewHolder(goodGiftsView);
case TASK_CENTER:
View taskCenterView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_tsak_center, parent, false);
return new DrawerTaskViewHolder(taskCenterView);
case FUN_GAMES:
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_fun_games_view, parent, false);
return new FunGamesViewHolder(runGamesView);
case RIGHTS_INTERESTS:
View rightsInterestsView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rights_interests, parent, false);
return new RigtsInterestsViewHolder(rightsInterestsView);
case RECOMMEND:
View recommendView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_recommend, parent, false);
return new RecommendViewHolder(recommendView);
default:
View gamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_interaction_games_view, parent, false);
return new InteractionGamesViewHolder(gamesView);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof DrawerRecommendViewHolder) {
DrawerRecommendViewHolder recommendViewHolder = (DrawerRecommendViewHolder) holder;
recommendViewHolder.setData(infoModels.get(position));
} else if (holder instanceof DrawerTaskViewHolder) {
DrawerTaskViewHolder taskViewHolder = (DrawerTaskViewHolder) holder;
taskViewHolder.setData(infoModels.get(position));
} else if (holder instanceof FunGamesViewHolder) {
FunGamesViewHolder funGamesViewHolder = (FunGamesViewHolder) holder;
funGamesViewHolder.setData(infoModels.get(position));
} else if (holder instanceof RigtsInterestsViewHolder) {
RigtsInterestsViewHolder rigtsInterestsViewHolder = (RigtsInterestsViewHolder) holder;
rigtsInterestsViewHolder.setData(infoModels.get(position));
} else if (holder instanceof InteractionGamesViewHolder) {
InteractionGamesViewHolder interactionGamesViewHolder = (InteractionGamesViewHolder) holder;
interactionGamesViewHolder.setData(infoModels.get(position));
} else if (holder instanceof RecommendViewHolder) {
RecommendViewHolder recommendViewHolder = (RecommendViewHolder) holder;
recommendViewHolder.setData(infoModels.get(position));
recommendViewHolder.updateData(list);
recommendViewHolder.setListener(new RecommendViewHolder.RecommendViewListener() {
@Override
public void changeOneBatch() {
Map<String, Object> map = new HashMap<>();
map.put("num", "9");
map.put("live_recommend", "sidebar");
map.put("refresh", "1");
//推荐位
MainNetManager.get((Activity) mContext)
.anchorRecommend(map, new com.yunbao.common.http.base.HttpCallback<AnchorRecommendModel>() {
@Override
public void onSuccess(AnchorRecommendModel anchorRecommendModel) {
List<AnchorRecommendItemModel> models = anchorRecommendModel.getList();
int userIndex = -1;
for (int i = 0; i < models.size(); i++) {
if (TextUtils.equals(models.get(i).getUid(), liveId)) {
userIndex = i;
}
}
if (userIndex != -1) {
models.remove(userIndex);
}
recommendViewHolder.updateData(models);
}
@Override
public void onError(String error) {
ToastUtil.show(mContext.getString(R.string.net_error));
}
});
}
@Override
public void goToLive(AnchorRecommendItemModel model) {
if (listener != null) {
listener.goToLive(model);
}
}
});
}
}
@Override
public int getItemCount() {
return infoModels.size();
}
@Override
public int getItemViewType(int position) {
CustomSidebarInfoModel model = infoModels.get(position);
switch (model.getType()) {
case "1":
return GOOD_GIFTS;
case "2":
return TASK_CENTER;
case "3":
return FUN_GAMES;
case "4":
return RIGHTS_INTERESTS;
case "5":
return RECOMMEND;
}
return super.getItemViewType(position);
}
public void updateData(List<CustomSidebarInfoModel> mInfoModels) {
infoModels.clear();
infoModels.addAll(mInfoModels);
notifyDataSetChanged();
}
private CustomDrawerListener listener;
public CustomDrawerPopupAdapter setListener(CustomDrawerListener listener) {
this.listener = listener;
return this;
}
public interface CustomDrawerListener {
void goToLive(AnchorRecommendItemModel model);
}
}

View File

@@ -0,0 +1,49 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.CustomSidebarChildModel;
import com.yunbao.common.views.DrawerRecommendChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class DrawerRecommendAdapter extends RecyclerView.Adapter {
private Context mContext;
private List<CustomSidebarChildModel> child = new ArrayList<>();
public DrawerRecommendAdapter(Context mContext) {
this.mContext = mContext;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View goodGiftsView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_drawer_recommend_child, parent, false);
return new DrawerRecommendChildViewHolder(goodGiftsView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
DrawerRecommendChildViewHolder childViewHolder = (DrawerRecommendChildViewHolder) holder;
childViewHolder.setData(child.get(position));
}
@Override
public int getItemCount() {
return child.size();
}
public void updateData(List<CustomSidebarChildModel> mChild) {
child.clear();
child.addAll(mChild);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,70 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.CustomSidebarChildModel;
import com.yunbao.common.event.CustomDrawerPopupEvent;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.views.DrawerTaskChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class DrawerTaskAdapter extends RecyclerView.Adapter {
private Context mContext;
private List<CustomSidebarChildModel> child = new ArrayList<>();
public DrawerTaskAdapter(Context mContext) {
this.mContext = mContext;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View taskCenterView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_tsak_center_child, parent, false);
return new DrawerTaskChildViewHolder(taskCenterView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
DrawerTaskChildViewHolder taskChildViewHolder = (DrawerTaskChildViewHolder) holder;
taskChildViewHolder.setData(child.get(position), position);
taskChildViewHolder.setListener(new DrawerTaskChildViewHolder.DrawerTaskChildListener() {
@Override
public void giftSuccess(CustomSidebarChildModel model, int index) {
//将领取的任务移动至任务列表尾部
Bus.get().post(new CustomDrawerPopupEvent()
.setDisMiss(false).setRefresh(true));
}
});
}
@Override
public int getItemCount() {
if (child.size()>3){
return 3;
}else {
return child.size();
}
}
public void updateData(List<CustomSidebarChildModel> mChild) {
child.clear();
child.addAll(mChild);
// for (CustomSidebarChildModel childModel : mChild) {
// if (TextUtils.equals("1", childModel.getIsShow())) {
// child.add(childModel);
// }
// }
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,63 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.CustomSidebarChildModel;
import com.yunbao.common.views.FunGamesChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class FunGamesAdapter extends RecyclerView.Adapter {
private Context mContext;
private boolean rigts;
private List<CustomSidebarChildModel> child = new ArrayList<>();
public FunGamesAdapter(Context mContext, boolean rigts) {
this.mContext = mContext;
this.rigts = rigts;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_fun_games_child_view, parent, false);
return new FunGamesChildViewHolder(runGamesView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
FunGamesChildViewHolder childViewHolder = (FunGamesChildViewHolder) holder;
childViewHolder.setData(child.get(position), rigts);
}
@Override
public int getItemCount() {
return child.size();
}
public void updateData(List<CustomSidebarChildModel> mChild) {
child.clear();
if (mChild.size() > 8) {
for (int i = 0; i < 8; i++) {
child.add(mChild.get(i));
}
} else {
child.addAll(mChild);
}
notifyDataSetChanged();
}
public void selectAll(List<CustomSidebarChildModel> mChild){
child.clear();
child.addAll(mChild);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,48 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.GiftWallModel;
import com.yunbao.common.views.GiftAlreadyWallViewHolder;
import java.util.ArrayList;
import java.util.List;
public class GiftAlreadyWallAdapter extends RecyclerView.Adapter {
private List<GiftWallModel> giftWall = new ArrayList<>();
private boolean sbWy;//是否正在直播
public GiftAlreadyWallAdapter(boolean sbWy) {
this.sbWy = sbWy;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gift_already_wall, parent, false);
return new GiftAlreadyWallViewHolder(herdView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
GiftAlreadyWallViewHolder withoutWallViewHolder = (GiftAlreadyWallViewHolder) holder;
withoutWallViewHolder.showData(giftWall.get(position), sbWy);
}
@Override
public int getItemCount() {
return giftWall.size();
}
public void addAllData(List<GiftWallModel> mGiftWall) {
giftWall.clear();
giftWall.addAll(mGiftWall);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,40 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.GiftQuantityModel;
import com.yunbao.common.views.GiftNumber;
import java.util.List;
public class GiftNumberAdapter extends RecyclerView.Adapter {
private List<GiftQuantityModel> giftQuantityModels;
public GiftNumberAdapter(List<GiftQuantityModel> giftQuantityModels) {
this.giftQuantityModels = giftQuantityModels;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View robotSayHelloView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_gift_number, parent, false);
return new GiftNumber(robotSayHelloView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
GiftNumber giftNumber = (GiftNumber) holder;
giftNumber.showData(giftQuantityModels.get(position));
}
@Override
public int getItemCount() {
return giftQuantityModels.size();
}
}

View File

@@ -0,0 +1,43 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.GiftWallModel;
import com.yunbao.common.views.GiftWithoutWallViewHolder;
import java.util.ArrayList;
import java.util.List;
public class GiftWithoutWallAdapter extends RecyclerView.Adapter {
private List<GiftWallModel> giftWall = new ArrayList<>();
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gift_without_wall, parent, false);
return new GiftWithoutWallViewHolder(herdView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
GiftWithoutWallViewHolder withoutWallViewHolder = (GiftWithoutWallViewHolder) holder;
withoutWallViewHolder.showData(giftWall.get(position));
}
@Override
public int getItemCount() {
return giftWall.size();
}
public void addAllData(List<GiftWallModel> mGiftWall) {
giftWall.clear();
giftWall.addAll(mGiftWall);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,88 @@
package com.yunbao.common.adapter;
import androidx.recyclerview.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.yunbao.common.utils.FaceUtil;
import com.yunbao.common.R;
import com.yunbao.common.interfaces.OnFaceClickListener;
import java.util.List;
/**
* Created by cxf on 2018/7/11.
* 聊天表情的RecyclerView Adapter
*/
public class ImChatFaceAdapter extends RecyclerView.Adapter<ImChatFaceAdapter.Vh> {
private List<String> mList;
private LayoutInflater mInflater;
private View.OnClickListener mOnClickListener;
public ImChatFaceAdapter(List<String> list, LayoutInflater inflater, final OnFaceClickListener onFaceClickListener) {
mList = list;
mInflater = inflater;
mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Object tag = v.getTag();
if (tag != null && onFaceClickListener != null) {
String str = (String) v.getTag();
if (!TextUtils.isEmpty(str)) {
if ("<".equals(str)) {
onFaceClickListener.onFaceDeleteClick();
} else {
onFaceClickListener.onFaceClick(str, v.getId());
}
}
}
}
};
}
@Override
public Vh onCreateViewHolder(ViewGroup parent, int viewType) {
return new Vh(mInflater.inflate(R.layout.item_list_face, parent, false));
}
@Override
public void onBindViewHolder(Vh vh, int position) {
vh.setData(mList.get(position));
}
@Override
public int getItemCount() {
return mList.size();
}
class Vh extends RecyclerView.ViewHolder {
ImageView mImageView;
public Vh(View itemView) {
super(itemView);
mImageView = (ImageView) itemView;
mImageView.setOnClickListener(mOnClickListener);
}
void setData(String str) {
mImageView.setTag(str);
if (!TextUtils.isEmpty(str)) {
if ("<".equals(str)) {
mImageView.setImageResource(R.mipmap.icon_face_delete);
} else {
int imgRes = FaceUtil.getFaceImageRes(str);
mImageView.setId(imgRes);
mImageView.setImageResource(imgRes);
}
}else{
mImageView.setClickable(false);
}
}
}
}

View File

@@ -0,0 +1,80 @@
package com.yunbao.common.adapter;
import android.content.Context;
import androidx.annotation.Nullable;
import androidx.viewpager.widget.PagerAdapter;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.yunbao.common.utils.FaceUtil;
import com.yunbao.common.R;
import com.yunbao.common.interfaces.OnFaceClickListener;
import java.util.ArrayList;
import java.util.List;
/**
* Created by cxf on 2018/7/11.
* 聊天表情的ViewPager Adapter
*/
public class ImChatFacePagerAdapter extends PagerAdapter {
private List<View> mViewList;
private static final int FACE_COUNT = 20;//每页20个表情
public ImChatFacePagerAdapter(Context context, OnFaceClickListener onFaceClickListener) {
LayoutInflater inflater = LayoutInflater.from(context);
mViewList = new ArrayList<>();
List<String> faceList = FaceUtil.getFaceList();
int fromIndex = 0;
int size = faceList.size();
int pageCount = size / FACE_COUNT;
if (size % FACE_COUNT > 0) {
pageCount++;
for (int i = 0, count = pageCount * FACE_COUNT - size; i < count; i++) {
faceList.add("");
}
}
for (int i = 0; i < pageCount; i++) {
RecyclerView recyclerView = (RecyclerView) inflater.inflate(R.layout.view_chat_face_page, null, false);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new GridLayoutManager(context, 7, GridLayoutManager.VERTICAL, false));
int endIndex = fromIndex + FACE_COUNT;
List<String> list = new ArrayList<>();
for (int j = fromIndex; j < endIndex; j++) {
list.add(faceList.get(j));
}
list.add("<");
recyclerView.setAdapter(new ImChatFaceAdapter(list, inflater, onFaceClickListener));
mViewList.add(recyclerView);
fromIndex = endIndex;
}
}
@Override
public int getCount() {
return mViewList.size();
}
@Override
public boolean isViewFromObject(@Nullable View view, @Nullable Object object) {
return view == object;
}
@Override
public Object instantiateItem(@Nullable ViewGroup container, int position) {
View view = mViewList.get(position);
container.addView(view);
return view;
}
@Override
public void destroyItem(@Nullable ViewGroup container, int position, @Nullable Object object) {
container.removeView(mViewList.get(position));
}
}

View File

@@ -0,0 +1,92 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import com.yunbao.common.R;
import com.yunbao.common.activity.SelectImageActivity;
import com.yunbao.common.bean.ImageEntity;
import com.yunbao.common.glide.ImgLoader;
import java.util.List;
/**
* Created by Chen Haoxuan on 2022/4/30.
* Description:
*/
public class ImageAdapter extends CommonRecycleAdapter<ImageEntity> {
private Context mContext;
private onSelectImageCountListener mSelectImageCountListener;
private List<ImageEntity> mSelectImages;
public ImageAdapter(Context context, List<ImageEntity> images, List<ImageEntity> selectedImages, MultiTypeSupport typeSupport) {
super(context, images, typeSupport);
this.mContext = context;
this.mSelectImages = selectedImages;
}
@Override
protected void convert(CommonViewHolder holder, final ImageEntity image, int position) {
if (!TextUtils.isEmpty(image.getPath())) {
final ImageView chb_selected = holder.getView(R.id.iv_selected);
final View maskView = holder.getView(R.id.mask);
ImageView iv_image = holder.getView(R.id.iv_image);
// GlideApp.with(mContext).load(image.getPath()).into(iv_image);
ImgLoader.display(mContext, image.getPath(), iv_image);
chb_selected.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (image.isSelect()) {
image.setSelect(false);
mSelectImages.remove(image);
chb_selected.setSelected(false);
} else if (mSelectImages.size() < SelectImageActivity.MAX_SIZE) {
image.setSelect(true);
mSelectImages.add(image);
chb_selected.setSelected(true);
// maskView.setVisibility(image.isSelect() ? View.VISIBLE : View.GONE);
}
if (mSelectImageCountListener != null) {
mSelectImageCountListener.onSelectImageCount(mSelectImages.size());
mSelectImageCountListener.onSelectImageList(mSelectImages);
}
}
});
chb_selected.setSelected(image.isSelect());
// maskView.setVisibility(image.isSelect() ? View.VISIBLE : View.GONE);
} else {
holder.getView(R.id.iv_camera).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnCameraClickListener != null) {
mOnCameraClickListener.onCameraClick();
}
}
});
}
}
public void setSelectImageCountListener(onSelectImageCountListener selectImageCountListener) {
mSelectImageCountListener = selectImageCountListener;
}
public interface onSelectImageCountListener {
void onSelectImageCount(int count);
void onSelectImageList(List<ImageEntity> images);
}
private onCameraClickListener mOnCameraClickListener;
public void setOnCameraClickListener(onCameraClickListener onCameraClickListener) {
this.mOnCameraClickListener = onCameraClickListener;
}
public interface onCameraClickListener {
void onCameraClick();
}
}

View File

@@ -0,0 +1,34 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.widget.ImageView;
import com.yunbao.common.R;
import com.yunbao.common.bean.ImageFolderEntity;
import com.yunbao.common.glide.ImgLoader;
import java.util.List;
/**
* Created by Chen Haoxuan on 2022/4/30.
*/
public class ImageFolderAdapter extends CommonRecycleAdapter<ImageFolderEntity> {
private Context mContext;
public ImageFolderAdapter(Context context, List<ImageFolderEntity> imageFolders, int layoutId) {
super(context, imageFolders, layoutId);
this.mContext = context;
}
@Override
protected void convert(CommonViewHolder holder, ImageFolderEntity imageFolder, int potion) {
holder.setText(R.id.tv_folder_name, imageFolder.getName())
.setText(R.id.tv_size, imageFolder.getImages().size() + "");
ImageView iv_folder = holder.getView(R.id.iv_folder);
ImgLoader.display(mContext, imageFolder.getAlbumPath(), iv_folder);
// GlideApp.with(mContext)
// .load(imageFolder.getAlbumPath())
// .into(iv_folder);
}
}

View File

@@ -0,0 +1,79 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.CustomSidebarChildModel;
import com.yunbao.common.event.CustomDrawerPopupEvent;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.views.InteractionGamesChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class InteractionGamesAdapter extends RecyclerView.Adapter {
private Context mContext;
private boolean rigts;
private List<CustomSidebarChildModel> child = new ArrayList<>();
public InteractionGamesAdapter(Context mContext, boolean rigts) {
this.mContext = mContext;
this.rigts = rigts;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_live_new_role_fun_games_child_view3, parent, false);
return new InteractionGamesChildViewHolder(runGamesView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
InteractionGamesChildViewHolder childViewHolder = (InteractionGamesChildViewHolder) holder;
childViewHolder.setData(child.get(position), rigts);
childViewHolder.setItemViewClicks(new InteractionGamesChildViewHolder.InteractionGamesCallBack() {
@Override
public void onItemViewClicks(CustomSidebarChildModel model, boolean rigts) {
long activityID = TextUtils.isEmpty(model.getSrc()) ? 0 : Long.parseLong(model.getSrc());
if (activityID != 0) {
Bus.get().post(new CustomDrawerPopupEvent()
.setDisMiss(true).setInteractionID(activityID).setInteraction(true).setChild(child));
}
}
});
}
@Override
public int getItemCount() {
return child.size();
}
public void updateData(List<CustomSidebarChildModel> mChild) {
child.clear();
if (mChild.size() > 8) {
for (int i = 0; i < 8; i++) {
child.add(mChild.get(i));
}
} else {
child.addAll(mChild);
}
notifyDataSetChanged();
}
public void selectAll(List<CustomSidebarChildModel> mChild) {
child.clear();
child.addAll(mChild);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,65 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.CustomSidebarChildModel;
import com.yunbao.common.views.FunGamesChildViewHolder;
import com.yunbao.common.views.NewRoleFunGamesChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class LiveNewRoleFunGamesAdapter extends RecyclerView.Adapter {
private Context mContext;
private boolean rigts;
private List<CustomSidebarChildModel> child = new ArrayList<>();
private boolean showRed = false;
public LiveNewRoleFunGamesAdapter(Context mContext, boolean rigts,boolean showRed) {
this.mContext = mContext;
this.rigts = rigts;
this.showRed = showRed;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_live_new_role_fun_games_child_view, parent, false);
return new NewRoleFunGamesChildViewHolder(runGamesView,showRed);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
NewRoleFunGamesChildViewHolder childViewHolder = (NewRoleFunGamesChildViewHolder) holder;
childViewHolder.setData(child.get(position), rigts);
}
@Override
public int getItemCount() {
return child.size();
}
public void updateData(List<CustomSidebarChildModel> mChild) {
child.clear();
if (mChild.size() > 8) {
for (int i = 0; i < 8; i++) {
child.add(mChild.get(i));
}
} else {
child.addAll(mChild);
}
notifyDataSetChanged();
}
public void selectAll(List<CustomSidebarChildModel> mChild) {
child.clear();
child.addAll(mChild);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,85 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.CustomSidebarChildModel;
import com.yunbao.common.event.CustomDrawerPopupEvent;
import com.yunbao.common.event.LiveNewRoleEvent;
import com.yunbao.common.event.NewRoleCustomDrawerPopupEvent;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.views.InteractionGamesChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class LiveNewRoleInteractionGamesAdapter extends RecyclerView.Adapter {
private Context mContext;
private boolean rigts;
private List<CustomSidebarChildModel> child = new ArrayList<>();
public LiveNewRoleInteractionGamesAdapter(Context mContext, boolean rigts) {
this.mContext = mContext;
this.rigts = rigts;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_live_new_role_fun_games_child_view3, parent, false);
return new InteractionGamesChildViewHolder(runGamesView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
InteractionGamesChildViewHolder childViewHolder = (InteractionGamesChildViewHolder) holder;
childViewHolder.setData(child.get(position), rigts);
childViewHolder.setItemViewClicks(new InteractionGamesChildViewHolder.InteractionGamesCallBack() {
@Override
public void onItemViewClicks(CustomSidebarChildModel model, boolean rigts) {
long activityID = TextUtils.isEmpty(model.getSrc()) ? 0 : Long.parseLong(model.getSrc());
if (activityID != 0) {
Bus.get().post(new NewRoleCustomDrawerPopupEvent()
.setDisMiss(true)
.setInteractionID(activityID)
.setChild(child)
.setInteraction(true));
}
Bus.get().post(new LiveNewRoleEvent());
}
});
}
@Override
public int getItemCount() {
return child.size();
}
public void updateData(List<CustomSidebarChildModel> mChild) {
child.clear();
if (mChild.size() > 8) {
for (int i = 0; i < 8; i++) {
child.add(mChild.get(i));
}
} else {
child.addAll(mChild);
}
notifyDataSetChanged();
}
public void selectAll(List<CustomSidebarChildModel> mChild) {
child.clear();
child.addAll(mChild);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,102 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.CustomSidebarInfoModel;
import com.yunbao.common.views.LiveNewRoleFunGamesViewHolder;
import com.yunbao.common.views.LiveNewRoleInteractionGamesViewHolder;
import com.yunbao.common.views.LiveNewRoleRigtsInterestsViewHolder;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
public class LiveNewRolerPopupAdapter extends RecyclerView.Adapter {
private Context mContext;
// "type": 1,//模块类型 1 充值送好礼类型2 任务中心类型 3趣味游戏类4 权益 ,5为你推荐
private final int FUN_GAMES = 3;
private final int RIGHTS_INTERESTS = 4;
private List<CustomSidebarInfoModel> infoModels = new ArrayList<>();
private boolean showRed = false;
public LiveNewRolerPopupAdapter(Context mContext,boolean showRed) {
this.mContext = mContext;
this.showRed = showRed;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
switch (viewType) {
case FUN_GAMES:
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_new_roler_fun_games_view, parent, false);
return new LiveNewRoleFunGamesViewHolder(runGamesView);
case RIGHTS_INTERESTS:
View rightsInterestsView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_live_new_roler_ights_interests, parent, false);
return new LiveNewRoleRigtsInterestsViewHolder(rightsInterestsView,showRed);
default:
View gamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_live_new_role_interaction_games_view, parent, false);
return new LiveNewRoleInteractionGamesViewHolder(gamesView);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof LiveNewRoleFunGamesViewHolder) {
LiveNewRoleFunGamesViewHolder funGamesViewHolder = (LiveNewRoleFunGamesViewHolder) holder;
funGamesViewHolder.setData(infoModels.get(position));
} else if (holder instanceof LiveNewRoleRigtsInterestsViewHolder) {
LiveNewRoleRigtsInterestsViewHolder rigtsInterestsViewHolder = (LiveNewRoleRigtsInterestsViewHolder) holder;
rigtsInterestsViewHolder.setData(infoModels.get(position));
} else if (holder instanceof LiveNewRoleInteractionGamesViewHolder) {
LiveNewRoleInteractionGamesViewHolder interactionGamesViewHolder = (LiveNewRoleInteractionGamesViewHolder) holder;
interactionGamesViewHolder.setData(infoModels.get(position));
}
}
@Override
public int getItemCount() {
return infoModels.size();
}
@Override
public int getItemViewType(int position) {
CustomSidebarInfoModel model = infoModels.get(position);
switch (model.getType()) {
case "3":
return FUN_GAMES;
case "4":
return RIGHTS_INTERESTS;
}
return super.getItemViewType(position);
}
public void updateData(List<CustomSidebarInfoModel> mInfoModels) {
infoModels.clear();
infoModels.addAll(mInfoModels);
notifyDataSetChanged();
}
private CustomDrawerListener listener;
public LiveNewRolerPopupAdapter setListener(CustomDrawerListener listener) {
this.listener = listener;
return this;
}
public interface CustomDrawerListener {
void goToLive(AnchorRecommendItemModel model);
}
}

View File

@@ -0,0 +1,179 @@
package com.yunbao.common.adapter;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.WishModel;
import com.yunbao.common.event.LiveNewWishListCloseEvent;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.DayWishItemViewHolder;
import com.yunbao.common.views.LunarWishItemViewHolder;
import com.yunbao.common.views.SeasonalWishItemViewHolder;
import com.yunbao.common.views.WeekWishItemViewHolder;
import java.util.ArrayList;
import java.util.List;
public class LiveNewWishAdapter extends RecyclerView.Adapter {
private int type = 0;
private List<WishModel> wishList = new ArrayList<>();
public void addData(List<WishModel> wishModelList, int type) {
this.type = type;
wishList.clear();
wishList.addAll(wishModelList);
wishList.add(null);
notifyDataSetChanged();
}
public void addGiftListModel(WishModel model) {
switch (type) {
case 1:
Bus.get().post(new LiveNewWishListCloseEvent().setDayWish(true));
break;
case 2:
Bus.get().post(new LiveNewWishListCloseEvent().setZhouXin(true));
break;
case 3:
Bus.get().post(new LiveNewWishListCloseEvent().setLunarWish(true));
break;
case 4:
Bus.get().post(new LiveNewWishListCloseEvent().setSeasonalWish(true));
break;
}
boolean isAdd = false;
for (int i = 0; i < wishList.size(); i++) {
if (wishList.get(i)!=null){
if (!TextUtils.isEmpty(wishList.get(i).getLid()) && !TextUtils.isEmpty(model.getLid())
&& TextUtils.equals(wishList.get(i).getLid(), model.getLid())) {
ToastUtil.show(WordUtil.isNewZh()?"重複添加禮物":"Too many gifts");
isAdd = true;
}
}
}
if (!isAdd) {
wishList.add(0, model);
}
notifyDataSetChanged();
}
public List<WishModel> getWishList() {
return wishList;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (type == 1) {
View dayWish = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_day_wish, parent, false);
return new DayWishItemViewHolder(dayWish);
} else if (type == 2) {
View weekWish = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_week_wish, parent, false);
return new WeekWishItemViewHolder(weekWish);
} else if (type == 3) {
View lunarWish = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_lunar_wish, parent, false);
return new LunarWishItemViewHolder(lunarWish);
} else {
View seasonalWish = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_seasonal_wish, parent, false);
return new SeasonalWishItemViewHolder(seasonalWish);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (position == wishList.size()) return;
if (holder instanceof DayWishItemViewHolder) {
DayWishItemViewHolder dayWishItemViewHolder = (DayWishItemViewHolder) holder;
dayWishItemViewHolder.steDayWishData(wishList.get(position), position, new DayWishItemViewHolder.DayWishItemListener() {
@Override
public void onDelete(int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setDayWish(true));
wishList.remove(index);
notifyDataSetChanged();
}
@Override
public void onUpdate(WishModel model, int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setDayWish(true));
wishList.remove(index);
wishList.add(index, model);
notifyItemChanged(index);
}
});
} else if (holder instanceof WeekWishItemViewHolder) {
WeekWishItemViewHolder weekWishItemViewHolder = (WeekWishItemViewHolder) holder;
weekWishItemViewHolder.steWeekWishData(wishList.get(position), position, new WeekWishItemViewHolder.WeekWishItemListener() {
@Override
public void onDelete(int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setZhouXin(true));
wishList.remove(index);
notifyDataSetChanged();
}
@Override
public void onUpdate(WishModel model, int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setZhouXin(true));
wishList.remove(index);
wishList.add(index, model);
notifyItemChanged(index);
}
});
} else if (holder instanceof LunarWishItemViewHolder) {
LunarWishItemViewHolder lunarWishItemViewHolder = (LunarWishItemViewHolder) holder;
lunarWishItemViewHolder.steLunarWishData(wishList.get(position), position, new LunarWishItemViewHolder.LunarWishItemListener() {
@Override
public void onDelete(int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setLunarWish(true));
wishList.remove(index);
notifyDataSetChanged();
}
@Override
public void onUpdate(WishModel model, int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setLunarWish(true));
wishList.remove(index);
wishList.add(index, model);
notifyItemChanged(index);
}
});
} else if (holder instanceof SeasonalWishItemViewHolder) {
SeasonalWishItemViewHolder seasonalWishItemViewHolder = (SeasonalWishItemViewHolder) holder;
seasonalWishItemViewHolder.steSeasonalWish(wishList.get(position), position, new SeasonalWishItemViewHolder.SeasonalWishItemListener() {
@Override
public void onDelete(int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setSeasonalWish(true));
wishList.remove(index);
notifyDataSetChanged();
}
@Override
public void onUpdate(WishModel model, int index) {
Bus.get().post(new LiveNewWishListCloseEvent().setSeasonalWish(true));
wishList.remove(index);
wishList.add(index, model);
notifyItemChanged(index);
}
});
}
}
@Override
public int getItemCount() {
return wishList.size();
}
}

View File

@@ -0,0 +1,56 @@
package com.yunbao.common.adapter;
import android.annotation.SuppressLint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.GiftListModel;
import com.yunbao.common.event.LiveNewWishGiftEvent;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.views.LiveNewWishGiftViewHolder;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import java.util.ArrayList;
import java.util.List;
public class LiveNewWishGiftAdapter extends RecyclerView.Adapter {
private List<GiftListModel> giftListModels = new ArrayList<>();
public LiveNewWishGiftAdapter(List<GiftListModel> giftListModels) {
this.giftListModels = giftListModels;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View dayWish = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gitf_wish, parent, false);
return new LiveNewWishGiftViewHolder(dayWish);
}
private int index = -1;
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") int position) {
LiveNewWishGiftViewHolder wishGiftViewHolder = (LiveNewWishGiftViewHolder) holder;
wishGiftViewHolder.setData(giftListModels.get(position), new ViewClicksAntiShake.ViewClicksCallBack() {
@Override
public void onViewClicks() {
index = position;
notifyDataSetChanged();
Bus.get().post(new LiveNewWishGiftEvent().setModel(giftListModels.get(position)));
}
});
wishGiftViewHolder.onSelect(index == position);
}
@Override
public int getItemCount() {
return giftListModels.size();
}
}

View File

@@ -0,0 +1,30 @@
package com.yunbao.common.adapter;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import java.util.ArrayList;
import java.util.List;
public class LiveNewWishListAdapter extends FragmentStateAdapter {
private List<Fragment> list = new ArrayList<>();
public LiveNewWishListAdapter(@NonNull FragmentActivity fragmentActivity, List<Fragment> list) {
super(fragmentActivity);
this.list = list;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return list.get(position);
}
@Override
public int getItemCount() {
return list.size();
}
}

View File

@@ -0,0 +1,30 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.GameRecordModel;
import com.yunbao.common.views.LiveSudGameHistoryViewHolder;
public class LiveSudGameHistoryAdapter extends RefreshAdapter<GameRecordModel> {
public LiveSudGameHistoryAdapter(Context context) {
super(context);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new LiveSudGameHistoryViewHolder(mInflater.inflate(R.layout.item_live_sud_game_history, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
LiveSudGameHistoryViewHolder sudGameListViewHolder = (LiveSudGameHistoryViewHolder) holder;
sudGameListViewHolder.setData(mList.get(position));
}
}

View File

@@ -0,0 +1,52 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.ListInfoMessageModel;
import com.yunbao.common.views.LiveSystemMessageViewHolder;
import java.util.ArrayList;
import java.util.List;
/**
* 主播消息中心适配器
*/
public class LiveSystemMessageAdapter extends RecyclerView.Adapter {
private Context mContext;
private LayoutInflater mInflater;
private List<ListInfoMessageModel> listInfoMessageModels = new ArrayList<>();
public LiveSystemMessageAdapter(Context mContext) {
this.mContext = mContext;
mInflater = LayoutInflater.from(mContext);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new LiveSystemMessageViewHolder(mInflater.inflate(R.layout.view_live_system_message, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
LiveSystemMessageViewHolder messageViewHolder = (LiveSystemMessageViewHolder) holder;
messageViewHolder.setViewData(listInfoMessageModels.get(position));
}
@Override
public int getItemCount() {
return listInfoMessageModels.size();
}
public void addData(List<ListInfoMessageModel> list) {
listInfoMessageModels.addAll(list);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,44 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.UserMedalListModel;
import com.yunbao.common.views.MedalAchievementViewHolder;
import java.util.ArrayList;
import java.util.List;
public class MedalAchievementAdapter extends RecyclerView.Adapter {
private List<UserMedalListModel> medalData = new ArrayList<>();
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_medal_achievement, parent, false);
return new MedalAchievementViewHolder(herdView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
MedalAchievementViewHolder achievementViewHolder = (MedalAchievementViewHolder) holder;
achievementViewHolder.showData(medalData.get(position));
}
@Override
public int getItemCount() {
return medalData.size();
}
public void addAllData(List<UserMedalListModel> mGiftWall) {
medalData.clear();
medalData.addAll(mGiftWall);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,43 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.GiftWallModel;
import com.yunbao.common.views.MonthGiftNamingViewHolder;
import java.util.ArrayList;
import java.util.List;
public class MonthGiftNamingAdapter extends RecyclerView.Adapter {
private List<GiftWallModel> giftWall = new ArrayList<>();
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_month_gift_naming, parent, false);
return new MonthGiftNamingViewHolder(herdView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
MonthGiftNamingViewHolder monthGiftNamingViewHolder = (MonthGiftNamingViewHolder) holder;
monthGiftNamingViewHolder.showData(giftWall.get(position));
}
@Override
public int getItemCount() {
return giftWall.size();
}
public void addAllData(List<GiftWallModel> mGiftWall) {
giftWall.clear();
giftWall.addAll(mGiftWall);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,10 @@
package com.yunbao.common.adapter;
/**
* Created by Chen Haoxuan on 2022/4/30.
* 多布局的支持
*/
public interface MultiTypeSupport<T> {
int getLayoutId(T item);
}

View File

@@ -0,0 +1,64 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.CustomSidebarChildModel;
import com.yunbao.common.views.NewRoleFunGamesChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class NewRoleFunGamesAdapter extends RecyclerView.Adapter {
private Context mContext;
private List<CustomSidebarChildModel> child = new ArrayList<>();
private boolean rigts;
public NewRoleFunGamesAdapter(Context mContext, boolean rigts) {
this.mContext = mContext;
this.rigts = rigts;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_live_new_role_fun_games_child_view2, parent, false);
return new NewRoleFunGamesChildViewHolder(runGamesView,false);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
NewRoleFunGamesChildViewHolder childViewHolder = (NewRoleFunGamesChildViewHolder) holder;
childViewHolder.setData(child.get(position), rigts);
}
@Override
public int getItemCount() {
return child.size();
}
public void updateData(List<CustomSidebarChildModel> mChild) {
child.clear();
if (mChild.size() > 8) {
for (int i = 0; i < 8; i++) {
child.add(mChild.get(i));
}
} else {
child.addAll(mChild);
}
notifyDataSetChanged();
}
public void selectAll(List<CustomSidebarChildModel> mChild) {
child.clear();
child.addAll(mChild);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,11 @@
package com.yunbao.common.adapter;
/**
* Created by zhiwenyan on 5/25/17.
* <p>
* 条目的点击事件
*/
public interface OnItemClickListener {
void onItemClick(int position);
}

View File

@@ -0,0 +1,67 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.views.RecommendChildViewHolder;
import java.util.ArrayList;
import java.util.List;
public class RecommendAdapter extends RecyclerView.Adapter {
private List<AnchorRecommendItemModel> list = new ArrayList<>();
private Context mContext;
public RecommendAdapter(Context mContext) {
this.mContext = mContext;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new RecommendChildViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_sidebar_lives_new, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
RecommendChildViewHolder itemViewHolder = (RecommendChildViewHolder) holder;
itemViewHolder.setData(list.get(position));
itemViewHolder.setListener(new RecommendChildViewHolder.RecommendChildListener() {
@Override
public void goToLive(AnchorRecommendItemModel model) {
if (callback != null) {
callback.goToLive(model);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public void updateData(List<AnchorRecommendItemModel> mList) {
list.clear();
list.addAll(mList);
notifyDataSetChanged();
}
private RecommendCallback callback;
public RecommendAdapter setCallback(RecommendCallback callback) {
this.callback = callback;
return this;
}
public interface RecommendCallback {
void goToLive(AnchorRecommendItemModel model);
}
}

View File

@@ -0,0 +1,112 @@
package com.yunbao.common.adapter;
import android.content.Context;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.interfaces.OnItemLongClickListener;
import com.yunbao.common.utils.ClickUtil;
import java.util.ArrayList;
import java.util.List;
/**
* Created by cxf on 2018/6/7.
*/
public abstract class RefreshAdapter<T> extends RecyclerView.Adapter {
protected Context mContext;
protected List<T> mList;
protected LayoutInflater mInflater;
protected RecyclerView mRecyclerView;
protected OnItemClickListener<T> mOnItemClickListener;
protected OnItemLongClickListener<T> mOnItemLongClickListener;
public RefreshAdapter(Context context) {
this(context, new ArrayList<T>());
}
public RefreshAdapter(Context context, List<T> list) {
mList = list;
mContext = context;
mInflater = LayoutInflater.from(mContext);
setHasStableIds(true);
}
@Override
public int getItemCount() {
if (mList != null) {
return mList.size();
}
return 0;
}
public void setOnItemClickListener(OnItemClickListener<T> onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
public void setOnItemLongClickListener(OnItemLongClickListener<T> onItemLongClickListener) {
mOnItemLongClickListener = onItemLongClickListener;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
mRecyclerView = recyclerView;
}
public RecyclerView getRecyclerView() {
return mRecyclerView;
}
public void setList(List<T> list) {
if (mList != null) {
mList.clear();
mList.addAll(list);
}
}
public void refreshDel(){
if (mRecyclerView != null) {
notifyDataSetChanged();
}
}
public void refreshData(List<T> list) {
if (mRecyclerView != null && list != null) {
mList.clear();
mList.addAll(list);
notifyDataSetChanged();
}
}
public void insertList(List<T> list) {
if (mRecyclerView != null && mList != null && list != null && list.size() > 0) {
int p = mList.size();
mList.addAll(list);
notifyItemRangeInserted(p, list.size());
}
}
public void clearData() {
if (mRecyclerView != null && mList != null) {
mList.clear();
notifyDataSetChanged();
}
}
@Override
public long getItemId(int position) {
return position;
}
protected static boolean canClick() {
return ClickUtil.canClick();
}
public List<T> getList() {
return mList;
}
}

View File

@@ -0,0 +1,51 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.LiveAiRobotBean;
import com.yunbao.common.views.RobotMessageViewHolder;
import java.util.ArrayList;
import java.util.List;
public class RobotMessageAdapter extends RecyclerView.Adapter {
private List<LiveAiRobotBean.Message> messageList = new ArrayList<>();
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View robotMessageView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_robot_message, parent, false);
return new RobotMessageViewHolder(robotMessageView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
RobotMessageViewHolder messageViewHolder = (RobotMessageViewHolder) holder;
messageViewHolder.setData(messageList.get(position), position + 1);
}
@Override
public int getItemCount() {
return messageList.size();
}
public void setDataAll(List<LiveAiRobotBean.Message> messages) {
messageList.clear();
messageList.addAll(messages);
notifyDataSetChanged();
}
// 删除数据
public void removeData(int position) {
messageList.remove(position);
//删除动画
notifyItemRemoved(position);
}
}

View File

@@ -0,0 +1,51 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.LiveAiRobotBean;
import com.yunbao.common.views.RobotSayHelloViewHoler;
import java.util.ArrayList;
import java.util.List;
public class RobotSayHelloAdapter extends RecyclerView.Adapter {
private List<LiveAiRobotBean.Message> messageList = new ArrayList<>();
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View robotSayHelloView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_robot_message, parent, false);
return new RobotSayHelloViewHoler(robotSayHelloView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
RobotSayHelloViewHoler robotSayHelloViewHoler = (RobotSayHelloViewHoler) holder;
robotSayHelloViewHoler.setData(messageList.get(position), position + 1);
}
@Override
public int getItemCount() {
return messageList.size();
}
public void setDataAll(List<LiveAiRobotBean.Message> messages) {
messageList.clear();
messageList.addAll(messages);
notifyDataSetChanged();
}
// 删除数据
public void removeData(int position) {
messageList.remove(position);
//删除动画
notifyItemRemoved(position);
}
}

View File

@@ -0,0 +1,26 @@
package com.yunbao.common.adapter;
import android.graphics.Rect;
import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
/**
* Created by Chen Haoxuan on 2022/4/30
* Description:
*/
public class SpaceGridItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpaceGridItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.left = space;
outRect.top = space;
outRect.right = space;
outRect.bottom = space;
}
}

View File

@@ -0,0 +1,122 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.SudGameChatImModel;
import com.yunbao.common.views.SudGameChatViewHolder;
import java.util.ArrayList;
import java.util.List;
public class SudGameChatAdapter extends RecyclerView.Adapter {
private boolean isBottom = false;
List<SudGameChatImModel> sudGameChatImModels = new ArrayList<>();
private RecyclerView mRecyclerView;
private LinearLayoutManager mLayoutManager;
private int mRecyclerViewScrolledDy;
private Context mContext;
public SudGameChatAdapter(Context mContext) {
this.mContext = mContext;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_sud_game_chat_item_holder, parent, false);
return new SudGameChatViewHolder(herdView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof SudGameChatViewHolder) {
SudGameChatViewHolder itemViewHolder = (SudGameChatViewHolder) holder;
itemViewHolder.sudGameChat(sudGameChatImModels.get(position));
}
}
@Override
public int getItemCount() {
return sudGameChatImModels.size();
}
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
mRecyclerView = recyclerView;
mLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (isBottom && dy >= 0) return;
mRecyclerViewScrolledDy = dy;
isBottom = false;
}
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == 0 && isSlideToBottom(recyclerView)) {
mRecyclerViewScrolledDy = 0;
scrollToBottom();
isBottom = true;
} else if (newState == 0) {
isBottom = false;
}
}
});
}
public synchronized void insertItem(SudGameChatImModel bean) {
if (bean == null) {
return;
}
int size = sudGameChatImModels.size();
//设置最大展示99条消息
if (size >= 100 && (isBottom || mRecyclerViewScrolledDy == 0)) {
sudGameChatImModels.subList(0, 50).clear();
notifyItemRangeRemoved(0, 50);
}
sudGameChatImModels.add(bean);
if (getItemCount() == 1) {
notifyDataSetChanged();
} else {
notifyItemInserted(getItemCount());
}
if (isBottom || mRecyclerViewScrolledDy == 0) {
scrollToBottom();
}
}
/**
* 判断是否滚到底部
*
* @param recyclerView
* @return
*/
public boolean isSlideToBottom(RecyclerView recyclerView) {
if (recyclerView == null) return false;
if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset() >= recyclerView.computeVerticalScrollRange())
return true;
return false;
}
public void scrollToBottom() {
if (sudGameChatImModels.size() > 0) {
mRecyclerView.smoothScrollToPosition(getItemCount());
}
mRecyclerViewScrolledDy = 0;
}
}

View File

@@ -0,0 +1,36 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.SudRoomListModel;
import com.yunbao.common.views.SudGameListViewHolder;
public class SudGameListAdapter extends RefreshAdapter<SudRoomListModel> {
private boolean isHome = false;
public SudGameListAdapter(Context context, boolean isHome) {
super(context);
this.isHome = isHome;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (isHome){
return new SudGameListViewHolder(mInflater.inflate(R.layout.item_home_sud_game_list, parent, false));
}else {
return new SudGameListViewHolder(mInflater.inflate(R.layout.item_sud_game_list, parent, false));
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
SudGameListViewHolder sudGameListViewHolder = (SudGameListViewHolder) holder;
sudGameListViewHolder.setData(mList.get(position),isHome);
}
}

View File

@@ -0,0 +1,83 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.interfaces.OnItemClickListener;
import java.util.ArrayList;
import java.util.List;
public class SudGameSearchHistoryListAdapter extends RecyclerView.Adapter<SudGameSearchHistoryListAdapter.ViewHolder> {
private List<String> mList;
private Context mContext;
private OnItemClickListener<String> onItemClickListener;
private boolean isHome = false;
public SudGameSearchHistoryListAdapter(Context mContext, boolean isHome) {
this.isHome = isHome;
this.mContext = mContext;
mList = new ArrayList<>();
}
public void setList(List<String> list) {
this.mList = list;
notifyDataSetChanged();
}
public void setOnItemClickListener(OnItemClickListener<String> onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (isHome) {
return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_search_history, parent, false));
} else {
return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_home_search_history, parent, false));
}
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.setData(mList.get(position));
}
@Override
public int getItemCount() {
return Math.min(mList.size(), 5);
}
public List<String> getList() {
return mList;
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView nameView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
nameView = itemView.findViewById(R.id.history);
}
public void setData(String name) {
nameView.setText(name);
nameView.setOnClickListener(v -> {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(name, 0);
}
});
}
}
}

View File

@@ -0,0 +1,34 @@
package com.yunbao.common.adapter;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class SudGameSearchRoomListAdapter extends RecyclerView.Adapter<SudGameSearchRoomListAdapter.ViewHolder> {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder{
public ViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}

View File

@@ -0,0 +1,135 @@
package com.yunbao.common.adapter;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.SudGameUserModel;
import com.yunbao.common.views.SudGameUserListViewHolder;
import java.util.ArrayList;
import java.util.List;
public class SudGameUserListAdapter extends RecyclerView.Adapter {
private List<SudGameUserModel> gameUserModels = new ArrayList<>();
private boolean micMax = false;
public SudGameUserListAdapter(List<SudGameUserModel> gameUserModels) {
if (gameUserModels.size() < 7) {
this.gameUserModels.addAll(gameUserModels);
for (int i = 0; i < this.gameUserModels.size(); i++) {
this.gameUserModels.get(i).setNullUser(false);
}
int size = 7 - gameUserModels.size();
for (int i = 0; i < size; i++) {
this.gameUserModels.add(new SudGameUserModel().setNullUser(true));
}
} else if (gameUserModels.size() == 7) {
this.gameUserModels.addAll(gameUserModels);
for (int i = 0; i < this.gameUserModels.size(); i++) {
this.gameUserModels.get(i).setNullUser(false);
}
} else {
for (int i = 0; i < 7; i++) {
this.gameUserModels.add(gameUserModels.get(i).setNullUser(false));
}
}
}
public void refreshSudGameUserList(List<SudGameUserModel> gameUserModels, List<String> muteUser) {
this.gameUserModels.clear();
if (gameUserModels.size() < 7) {
micMax = false;
this.gameUserModels.addAll(gameUserModels);
for (int i = 0; i < this.gameUserModels.size(); i++) {
for (String userID : muteUser) {
if (TextUtils.equals(userID, String.valueOf(this.gameUserModels.get(i).getId()))) {
this.gameUserModels.get(i).setMute(true);
}
}
this.gameUserModels.get(i).setNullUser(false);
}
int size = 7 - gameUserModels.size();
for (int i = 0; i < size; i++) {
this.gameUserModels.add(new SudGameUserModel().setNullUser(true));
}
} else if (gameUserModels.size() == 7) {
micMax = true;
this.gameUserModels.addAll(gameUserModels);
for (int i = 0; i < this.gameUserModels.size(); i++) {
this.gameUserModels.get(i).setNullUser(false);
}
} else {
micMax = true;
for (int i = 0; i < 7; i++) {
for (String userID : muteUser) {
if (TextUtils.equals(userID, String.valueOf(this.gameUserModels.get(i).getId()))) {
this.gameUserModels.get(i).setMute(true);
}
}
this.gameUserModels.add(gameUserModels.get(i).setNullUser(false));
}
}
notifyDataSetChanged();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_sud_game_user_list_holder, parent, false);
return new SudGameUserListViewHolder(herdView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
SudGameUserListViewHolder sudGameUserListViewHolder = (SudGameUserListViewHolder) holder;
sudGameUserListViewHolder.upData(gameUserModels.get(position), sudGameSmallCallBack, position);
}
@Override
public int getItemCount() {
return gameUserModels.size();
}
public boolean isMicMax() {
return micMax;
}
public void muteUser(String userID, boolean mute, int position) {
for (int i = 0; i < gameUserModels.size(); i++) {
SudGameUserModel sudGameUserModel = gameUserModels.get(i);
if (!sudGameUserModel.isNullUser()) {
if (TextUtils.equals(userID, String.valueOf(sudGameUserModel.getId()))) {
gameUserModels.get(i).setMute(mute);
}
}
}
notifyItemChanged(position);
}
private SudGameSmallCallBack sudGameSmallCallBack;
public SudGameUserListAdapter setSudGameSmallCallBack(SudGameSmallCallBack sudGameSmallCallBack) {
this.sudGameSmallCallBack = sudGameSmallCallBack;
return this;
}
public interface SudGameSmallCallBack {
void unMute(String userID, int position);
void mute(String userID, int position);
void viewInformation(SudGameUserModel sudGameUserModel);
}
}

View File

@@ -0,0 +1,54 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.SudRoomListModel;
import com.yunbao.common.views.SudGameListViewHolder;
import java.util.ArrayList;
import java.util.List;
public class SudHomeGameListAdapter extends RecyclerView.Adapter<SudGameListViewHolder> {
private Context mContext;
private List<SudRoomListModel> mList;
private boolean isHome = false;
public SudHomeGameListAdapter(Context mContext, boolean isHome) {
this.mContext = mContext;
this.isHome = isHome;
mList = new ArrayList<>();
}
public void setList(List<SudRoomListModel> mList) {
this.mList = mList;
notifyDataSetChanged();
}
@NonNull
@Override
public SudGameListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (isHome) {
return new SudGameListViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_home_sud_game_list, parent, false));
} else {
return new SudGameListViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_sud_game_list, parent, false));
}
}
@Override
public void onBindViewHolder(@NonNull SudGameListViewHolder holder, int position) {
holder.setData(mList.get(position),isHome);
}
@Override
public int getItemCount() {
return mList.size();
}
}

View File

@@ -0,0 +1,65 @@
package com.yunbao.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.views.SudTitleSelectViewHolder;
import java.util.ArrayList;
import java.util.List;
public class SudTitleSelectAdapter extends RecyclerView.Adapter {
private List<String> selectString = new ArrayList<>();
private int mIndex;
private int mType;
public SudTitleSelectAdapter(List<String> selectString, int index, int type) {
this.selectString = selectString;
mIndex = index;
mType = type;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View runGamesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_sud_title_select_view, parent, false);
return new SudTitleSelectViewHolder(runGamesView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
SudTitleSelectViewHolder childViewHolder = (SudTitleSelectViewHolder) holder;
childViewHolder.setData(selectString.get(position), mIndex == position, position, new SudTitleSelectViewHolder.SudTitleSelectListener() {
@Override
public void onSudTitleSelectCallBack(int index) {
if (sudTitleSelectCallBack != null) {
sudTitleSelectCallBack.onSudTitleSelectCallBack(index);
}
}
});
}
@Override
public int getItemCount() {
return selectString.size();
}
private SudTitleSelectCallBack sudTitleSelectCallBack;
public void setSudTitleSelectCallBack(SudTitleSelectCallBack sudTitleSelectCallBack) {
this.sudTitleSelectCallBack = sudTitleSelectCallBack;
}
public interface SudTitleSelectCallBack {
void onSudTitleSelectCallBack(int index);
}
}

View File

@@ -0,0 +1,45 @@
package com.yunbao.common.adapter;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by cxf on 2018/9/22.
*/
public class ViewPagerAdapter extends PagerAdapter {
private List<? extends View> mViewList;
public ViewPagerAdapter(List<? extends View> list) {
mViewList = list;
}
@Override
public int getCount() {
return mViewList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = mViewList.get(position);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(mViewList.get(position));
}
}

View File

@@ -0,0 +1,112 @@
package com.yunbao.common.bean;
import android.content.Context;
import com.google.gson.annotations.SerializedName;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.WordUtil;
/**
* 活动
*/
public class ActiveModel extends BaseModel {
/**
* active_id : 3
* active_name : 闖關熱戀
* active_img : https://qny.shayucm.com/chuangguan.png
* active_src : h5/activity/PassionateLove/index.html
* show_type : 0
*/
@SerializedName("active_id")
private String activeId = "";
@SerializedName("active_name")
private String activeName = "";
@SerializedName("active_img")
private String activeImg = "";
@SerializedName("active_src")
private String activeSrc = "";
@SerializedName("show_type")
private String showType = "";
@SerializedName("textColor")
private String textColor;
@SerializedName("bgColor")
private String bgColor;
public String getActiveId() {
return activeId;
}
public ActiveModel setActiveId(String activeId) {
this.activeId = activeId;
return this;
}
public String getActiveName() {
return activeName;
}
public ActiveModel setActiveName(String activeName) {
this.activeName = activeName;
return this;
}
public String getActiveImg() {
return activeImg;
}
public ActiveModel setActiveImg(String activeImg) {
this.activeImg = activeImg;
return this;
}
public String getActiveSrc() {
return activeSrc;
}
public ActiveModel setActiveSrc(String activeSrc) {
this.activeSrc = activeSrc;
return this;
}
public String getShowType() {
return showType;
}
public ActiveModel setShowType(String showType) {
this.showType = showType;
return this;
}
public String getTextColor() {
return textColor;
}
public void setTextColor(String textColor) {
this.textColor = textColor;
}
public String getBgColor() {
return bgColor;
}
public void setBgColor(String bgColor) {
this.bgColor = bgColor;
}
/**
* 获取跳转网页地址
*
* @return
*/
public String activityUrl(Context context, String liveUid) {
IMLoginModel userInfo = IMLoginManager.get(context).getUserInfo();
String url = CommonAppConfig.HOST + "/" + activeSrc +
"?uid=" + userInfo.getId() +
"&token=" + userInfo.getToken()
+ "&anchorUid=" + liveUid
+ "&active_id=" + activeId+ "&isZh=" + (WordUtil.isNewZh() ? "1" : 0);
return url;
}
}

View File

@@ -0,0 +1,38 @@
package com.yunbao.common.bean;
import com.alibaba.fastjson.annotation.JSONField;
/**
* Created by cxf on 2019/4/28.
*/
public class AdBean {
private String mUrl;
private String mLink;
private int animation;//是否使用过度动画
@JSONField(name = "thumb")
public String getUrl() {
return mUrl;
}
@JSONField(name = "thumb")
public void setUrl(String url) {
mUrl = url;
}
@JSONField(name = "href")
public String getLink() {
return mLink;
}
@JSONField(name = "href")
public void setLink(String link) {
mLink = link;
}
@JSONField(name = "animation")
public int getAnimation() {
return animation;
}
@JSONField(name = "animation")
public void setAnimation(int animation) {
this.animation = animation;
}
}

View File

@@ -0,0 +1,81 @@
package com.yunbao.common.bean;
import com.google.gson.annotations.SerializedName;
/**
* 机器人助手IM消息
*/
public class AiAutomaticSpeechModel extends BaseModel {
//助手名字颜色
@SerializedName("name_color")
private String nameColor;
//助手名字
@SerializedName("ai_name")
private String aiName;
//说话内容
@SerializedName("content")
private String content;
//被@用户名字
@SerializedName("user_name")
private String userName;
//标签图片
@SerializedName("icon")
private String icon;
//气泡背景
@SerializedName("system_bubble")
private String systemBubble;
public String getNameColor() {
return nameColor;
}
public AiAutomaticSpeechModel setNameColor(String nameColor) {
this.nameColor = nameColor;
return this;
}
public String getAiName() {
return aiName+":";
}
public AiAutomaticSpeechModel setAiName(String aiName) {
this.aiName = aiName;
return this;
}
public String getContent() {
return content;
}
public AiAutomaticSpeechModel setContent(String content) {
this.content = content;
return this;
}
public String getUserName() {
return userName;
}
public AiAutomaticSpeechModel setUserName(String userName) {
this.userName = userName;
return this;
}
public String getIcon() {
return icon;
}
public AiAutomaticSpeechModel setIcon(String icon) {
this.icon = icon;
return this;
}
public String getSystemBubble() {
return systemBubble;
}
public AiAutomaticSpeechModel setSystemBubble(String systemBubble) {
this.systemBubble = systemBubble;
return this;
}
}

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