androidx版本首次提交
This commit is contained in:
167
common/build.gradle
Normal file
167
common/build.gradle
Normal file
@@ -0,0 +1,167 @@
|
||||
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 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"
|
||||
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"]
|
||||
|
||||
//七牛云存储
|
||||
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 project(':billing')
|
||||
implementation 'com.teprinciple:updateapputils:2.3.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'
|
||||
|
||||
api 'com.facebook.android:facebook-login:6.5.0'
|
||||
api 'com.facebook.android:facebook-android-sdk:[5,6)'
|
||||
|
||||
api('com.twitter.sdk.android:twitter-core:3.1.1@aar') {
|
||||
transitive = true
|
||||
}
|
||||
api 'com.linecorp:linesdk:5.0.1'
|
||||
api 'com.adjust.sdk:adjust-android:4.30.1'
|
||||
api 'com.android.installreferrer:installreferrer:2.2'
|
||||
api 'com.google.firebase:firebase-analytics:15.0.0'
|
||||
|
||||
}
|
||||
62
common/google-services.json
Normal file
62
common/google-services.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"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.pdlive.shayu"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "292494634914-ctr3fptp5mkv2qqr4gkgjo9uluq2joqb.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "com.pdlive.shayu",
|
||||
"certificate_hash": "15fc5e70cf238323bf7111c8c627803985478e87"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "292494634914-ejtqvaj86a2lldv0di2pr3d5gngprahd.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "com.pdlive.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
320
common/img_optimizer.log
Normal 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.
|
||||
----------------------------------------
|
||||
BIN
common/libs/AndroidPicker-1.5.6.jar
Normal file
BIN
common/libs/AndroidPicker-1.5.6.jar
Normal file
Binary file not shown.
BIN
common/libs/PayssionSDK.jar
Normal file
BIN
common/libs/PayssionSDK.jar
Normal file
Binary file not shown.
BIN
common/libs/TencentLocationSdk_v6.2.5.3.jar
Normal file
BIN
common/libs/TencentLocationSdk_v6.2.5.3.jar
Normal file
Binary file not shown.
BIN
common/libs/TencentMapSDK_1.2.8.1.jar
Normal file
BIN
common/libs/TencentMapSDK_1.2.8.1.jar
Normal file
Binary file not shown.
BIN
common/libs/alipaySdk-20180601.jar
Normal file
BIN
common/libs/alipaySdk-20180601.jar
Normal file
Binary file not shown.
BIN
common/libs/arm64-v8a/libliteavsdk.so
Normal file
BIN
common/libs/arm64-v8a/libliteavsdk.so
Normal file
Binary file not shown.
BIN
common/libs/arm64-v8a/libsoundtouch.so
Normal file
BIN
common/libs/arm64-v8a/libsoundtouch.so
Normal file
Binary file not shown.
BIN
common/libs/arm64-v8a/libtraeimp-rtmp.so
Normal file
BIN
common/libs/arm64-v8a/libtraeimp-rtmp.so
Normal file
Binary file not shown.
BIN
common/libs/arm64-v8a/libtxffmpeg.so
Normal file
BIN
common/libs/arm64-v8a/libtxffmpeg.so
Normal file
Binary file not shown.
BIN
common/libs/arm64-v8a/libtxplayer.so
Normal file
BIN
common/libs/arm64-v8a/libtxplayer.so
Normal file
Binary file not shown.
BIN
common/libs/arm64-v8a/libtxsdl.so
Normal file
BIN
common/libs/arm64-v8a/libtxsdl.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi-v7a/libliteavsdk.so
Normal file
BIN
common/libs/armeabi-v7a/libliteavsdk.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi-v7a/libsoundtouch.so
Normal file
BIN
common/libs/armeabi-v7a/libsoundtouch.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi-v7a/libtraeimp-rtmp.so
Normal file
BIN
common/libs/armeabi-v7a/libtraeimp-rtmp.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi-v7a/libtxffmpeg.so
Normal file
BIN
common/libs/armeabi-v7a/libtxffmpeg.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi-v7a/libtxplayer.so
Normal file
BIN
common/libs/armeabi-v7a/libtxplayer.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi-v7a/libtxsdl.so
Normal file
BIN
common/libs/armeabi-v7a/libtxsdl.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi/libliteavsdk.so
Normal file
BIN
common/libs/armeabi/libliteavsdk.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi/libsoundtouch.so
Normal file
BIN
common/libs/armeabi/libsoundtouch.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi/libtraeimp-rtmp.so
Normal file
BIN
common/libs/armeabi/libtraeimp-rtmp.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi/libtxffmpeg.so
Normal file
BIN
common/libs/armeabi/libtxffmpeg.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi/libtxplayer.so
Normal file
BIN
common/libs/armeabi/libtxplayer.so
Normal file
Binary file not shown.
BIN
common/libs/armeabi/libtxsdl.so
Normal file
BIN
common/libs/armeabi/libtxsdl.so
Normal file
Binary file not shown.
BIN
common/libs/bdasr_3.0.8.2.jar
Normal file
BIN
common/libs/bdasr_3.0.8.2.jar
Normal file
Binary file not shown.
BIN
common/libs/liteavsdk.jar
Normal file
BIN
common/libs/liteavsdk.jar
Normal file
Binary file not shown.
25
common/proguard-rules.pro
vendored
Normal file
25
common/proguard-rules.pro
vendored
Normal 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
|
||||
69
common/src/main/AndroidManifest.xml
Normal file
69
common/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,69 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
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.pdlive.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>
|
||||
14250
common/src/main/assets/city.json
Normal file
14250
common/src/main/assets/city.json
Normal file
File diff suppressed because it is too large
Load Diff
703
common/src/main/java/com/yunbao/common/CommonAppConfig.java
Normal file
703
common/src/main/java/com/yunbao/common/CommonAppConfig.java
Normal file
@@ -0,0 +1,703 @@
|
||||
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.LevelBean;
|
||||
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 boolean IS_GOOGLE_PLAY = getMetaDataBoolean("IS_GOOGLE_PLAY");
|
||||
|
||||
//外部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<LevelBean> mLevelMap;
|
||||
private SparseArray<LevelBean> mAnchorLevelMap;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
public void setConfig(ConfigBean config) {
|
||||
mConfig = config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 经度
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 个人中心功能列表
|
||||
*/
|
||||
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 setLevel(String levelJson) {
|
||||
if (TextUtils.isEmpty(levelJson)) {
|
||||
return;
|
||||
}
|
||||
List<LevelBean> list = JSON.parseArray(levelJson, LevelBean.class);
|
||||
if (list == null || list.size() == 0) {
|
||||
return;
|
||||
}
|
||||
if (mLevelMap == null) {
|
||||
mLevelMap = new SparseArray<>();
|
||||
}
|
||||
mLevelMap.clear();
|
||||
for (LevelBean bean : list) {
|
||||
mLevelMap.put(bean.getLevel(), bean);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存主播等级信息
|
||||
*/
|
||||
public void setAnchorLevel(String anchorLevelJson) {
|
||||
if (TextUtils.isEmpty(anchorLevelJson)) {
|
||||
return;
|
||||
}
|
||||
List<LevelBean> list = JSON.parseArray(anchorLevelJson, LevelBean.class);
|
||||
if (list == null || list.size() == 0) {
|
||||
return;
|
||||
}
|
||||
if (mAnchorLevelMap == null) {
|
||||
mAnchorLevelMap = new SparseArray<>();
|
||||
}
|
||||
mAnchorLevelMap.clear();
|
||||
for (LevelBean bean : list) {
|
||||
mAnchorLevelMap.put(bean.getLevel(), bean);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存主播粉丝徽章信息
|
||||
*/
|
||||
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 LevelBean getLevel(int level) {
|
||||
if (mLevelMap == null) {
|
||||
String configString = SpUtil.getInstance().getStringValue(SpUtil.CONFIG);
|
||||
if (!TextUtils.isEmpty(configString)) {
|
||||
JSONObject obj = JSON.parseObject(configString);
|
||||
setLevel(obj.getString("level"));
|
||||
}
|
||||
}
|
||||
if (mLevelMap == null || mLevelMap.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
return mLevelMap.get(level);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取主播等级
|
||||
*/
|
||||
public LevelBean getAnchorLevel(int level) {
|
||||
if (mAnchorLevelMap == null) {
|
||||
String configString = SpUtil.getInstance().getStringValue(SpUtil.CONFIG);
|
||||
if (!TextUtils.isEmpty(configString)) {
|
||||
JSONObject obj = JSON.parseObject(configString);
|
||||
setAnchorLevel(obj.getString("levelanchor"));
|
||||
}
|
||||
}
|
||||
if (mAnchorLevelMap == null || mAnchorLevelMap.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
return mAnchorLevelMap.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);
|
||||
}
|
||||
|
||||
}
|
||||
132
common/src/main/java/com/yunbao/common/CommonAppContext.java
Normal file
132
common/src/main/java/com/yunbao/common/CommonAppContext.java
Normal file
@@ -0,0 +1,132 @@
|
||||
package com.yunbao.common;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import androidx.multidex.MultiDex;
|
||||
import androidx.multidex.MultiDexApplication;
|
||||
import android.util.Log;
|
||||
|
||||
import com.facebook.FacebookSdk;
|
||||
import com.facebook.appevents.AppEventsLogger;
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
import com.yunbao.common.http.CommonHttpUtil;
|
||||
import com.yunbao.common.utils.L;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import me.leolin.shortcutbadger.ShortcutBadger;
|
||||
|
||||
import static com.facebook.FacebookSdk.setAdvertiserIDCollectionEnabled;
|
||||
import static com.facebook.FacebookSdk.setAutoLogAppEventsEnabled;
|
||||
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/8/3.
|
||||
*/
|
||||
|
||||
public class CommonAppContext extends MultiDexApplication {
|
||||
|
||||
public static CommonAppContext sInstance;
|
||||
private int mCount;
|
||||
private boolean mFront;//是否前台
|
||||
public static int jpushMsgNum;
|
||||
public static int Ingroup = 0;
|
||||
public static String lang = "chinese";
|
||||
public static FirebaseAnalytics mFirebaseAnalytics;
|
||||
public static AppEventsLogger logger;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
sInstance = this;
|
||||
//初始化Http
|
||||
CommonHttpUtil.init();
|
||||
//初始化友盟统计
|
||||
// UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, null);
|
||||
FacebookSdk.sdkInitialize(getApplicationContext());
|
||||
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
|
||||
mFirebaseAnalytics.setAnalyticsCollectionEnabled(true);
|
||||
mFirebaseAnalytics.setUserProperty("ALLOW_AD_PERSONALIZATION_SIGNALS", "true" );
|
||||
|
||||
|
||||
logger = AppEventsLogger.newLogger(this);
|
||||
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("en")){
|
||||
lang = "english";
|
||||
}else{
|
||||
lang = "chinese";
|
||||
}
|
||||
Log.i("lang",lang);
|
||||
|
||||
}
|
||||
|
||||
@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++;
|
||||
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) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
276
common/src/main/java/com/yunbao/common/Constants.java
Normal file
276
common/src/main/java/com/yunbao/common/Constants.java
Normal file
@@ -0,0 +1,276 @@
|
||||
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 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 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 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;//語音
|
||||
|
||||
//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_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";//奖池升级
|
||||
//游戏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 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 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 = "0";//是否能发言,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;//
|
||||
|
||||
}
|
||||
61
common/src/main/java/com/yunbao/common/HtmlConfig.java
Normal file
61
common/src/main/java/com/yunbao/common/HtmlConfig.java
Normal 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=3";
|
||||
public static final String LOGIN_PRIVCAY1 = CommonAppConfig.HOST + "/portal/page/index/id/59";
|
||||
|
||||
//注册用户协议
|
||||
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";
|
||||
|
||||
}
|
||||
348
common/src/main/java/com/yunbao/common/activity/AbsActivity.java
Normal file
348
common/src/main/java/com/yunbao/common/activity/AbsActivity.java
Normal file
@@ -0,0 +1,348 @@
|
||||
package com.yunbao.common.activity;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
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.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.yunbao.common.R;
|
||||
import com.yunbao.common.interfaces.LifeCycleListener;
|
||||
import com.yunbao.common.utils.ClickUtil;
|
||||
|
||||
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;
|
||||
|
||||
@Override
|
||||
public Resources getResources() {
|
||||
Resources res = super.getResources();
|
||||
Configuration config = new Configuration();
|
||||
config.setToDefaults();
|
||||
res.updateConfiguration(config, res.getDisplayMetrics());
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
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 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;
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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(WordUtil.getString(R.string.copy_success));
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,510 @@
|
||||
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 androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.loader.content.CursorLoader;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
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;
|
||||
// @BindView(R.id.tv_back)
|
||||
TextView mTvBack;
|
||||
// @BindView(R.id.tv_ok)
|
||||
TextView mTvSelectCount;
|
||||
// @BindView(R.id.rv)
|
||||
RecyclerView mRvImage;
|
||||
// @BindView(R.id.tv_photo)
|
||||
TextView mTvPhoto;
|
||||
// @BindView(R.id.tv_preview)
|
||||
TextView mTvPreview;
|
||||
// @BindView(R.id.image_folder_view)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// @OnClick({R.id.tv_back, R.id.tv_ok, R.id.tv_photo, R.id.tv_preview})
|
||||
// public void onViewClicked(View view) {
|
||||
// switch (view.getId()) {
|
||||
// case R.id.tv_back:
|
||||
// finish();
|
||||
// break;
|
||||
// case R.id.tv_ok:
|
||||
// Intent intent = new Intent();
|
||||
// intent.putParcelableArrayListExtra(EXTRA_RESULT, (ArrayList<? extends Parcelable>) mSelectedImages);
|
||||
// setResult(RESULT_OK, intent);
|
||||
// finish();
|
||||
// break;
|
||||
// case R.id.tv_photo:
|
||||
// if (mImageFolderView.isShowing()) {
|
||||
// mImageFolderView.hide();
|
||||
// } else {
|
||||
// mImageFolderView.show();
|
||||
// }
|
||||
// break;
|
||||
// case R.id.tv_preview:
|
||||
// Intent previewIntent = new Intent(this, PreviewImageActivity.class);
|
||||
// previewIntent.putParcelableArrayListExtra("preview_images", (ArrayList<? extends Parcelable>) mSelectedImages);
|
||||
// startActivity(previewIntent);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
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) {
|
||||
//缩略图信息是储存在返回的intent中的Bundle中的,对应Bundle中的键为data,因此从Intent中取出 Bundle再根据data取出来Bitmap即可
|
||||
// Bundle extras = data.getExtras();
|
||||
// Bitmap bitmap = (Bitmap) extras.get("data");
|
||||
// BitmapFactory.decodeFile(this.getContentResolver().)
|
||||
// galleryAddPictures(mImageUri);
|
||||
// getSupportLoaderManager().restartLoader(0, null, mLoaderCallbacks);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,358 @@
|
||||
package com.yunbao.common.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.provider.MediaStore;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.webkit.JavascriptInterface;
|
||||
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 com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.Constants;
|
||||
import com.yunbao.common.R;
|
||||
import com.yunbao.common.utils.AndroidBug5497Workaround;
|
||||
import com.yunbao.common.utils.DpUtil;
|
||||
import com.yunbao.common.utils.L;
|
||||
import com.yunbao.common.utils.RouteUtil;
|
||||
import com.yunbao.common.utils.ToastUtil;
|
||||
import com.yunbao.common.utils.WordUtil;
|
||||
|
||||
/**
|
||||
* 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);
|
||||
L.e("H5--->" + url);
|
||||
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);
|
||||
AndroidBug5497Workaround.assistActivity(this);
|
||||
|
||||
mWebView = new WebView(mContext);
|
||||
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);
|
||||
rootView.addView(mWebView);
|
||||
mWebView.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
L.e("H5-------->" + url);
|
||||
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) {
|
||||
setTitle(view.getTitle());
|
||||
if (url.contains("for")) {
|
||||
mWebView.loadUrl("javascript:goAnchorTab()");
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
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(new JsInteration(), "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);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
//js调用原生
|
||||
public class JsInteration {
|
||||
@JavascriptInterface
|
||||
public void onBack() {
|
||||
finish();
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void modifyMydata() {
|
||||
indexInto = 1;
|
||||
RouteUtil.forwardEditProfileActivity();
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void reportUser(String touid) {
|
||||
RouteUtil.forwardLiveReportActivity(touid);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void gotoHomePage(String indexStr) {
|
||||
Log.e("tgasss","indexStr4"+indexStr);
|
||||
|
||||
if (!"".equals(indexStr) && indexStr != null) {
|
||||
int index = -1;
|
||||
if ("0".equals(indexStr)) {
|
||||
index = 0;
|
||||
} else if ("1".equals(indexStr)) {
|
||||
index = 1;
|
||||
} else if ("2".equals(indexStr)) {
|
||||
index = 2;
|
||||
} else if ("3".equals(indexStr)) {
|
||||
index = 3;
|
||||
}
|
||||
if (index != -1) {
|
||||
finish();
|
||||
Constants.isShowPage = index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void openWebView(String url) {
|
||||
Constants.isTitle = false;
|
||||
RouteUtil.forwardZhuangBanActivity(url);
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public void openWebViewTitle(String url) {
|
||||
Constants.isTitle = true;
|
||||
RouteUtil.forwardZhuangBanActivity(url);
|
||||
}
|
||||
}
|
||||
|
||||
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, WordUtil.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;
|
||||
}
|
||||
|
||||
public static void forward(Context context, String url, boolean addArgs) {
|
||||
if (Constants.LoginKefu) {
|
||||
if (addArgs) {
|
||||
url += "&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken();
|
||||
}
|
||||
}
|
||||
Intent intent = new Intent(context, WebViewActivity.class);
|
||||
intent.putExtra(Constants.URL, url);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
public static void forward(Context context, String url) {
|
||||
forward(context, url, true);
|
||||
}
|
||||
|
||||
@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;
|
||||
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();
|
||||
}
|
||||
// new Handler().postDelayed(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// mWebView.reload();
|
||||
// }
|
||||
// }, 100);
|
||||
}
|
||||
}
|
||||
@@ -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 = WordUtil.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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.yunbao.common.adapter;
|
||||
|
||||
/**
|
||||
* Created by zhiwenyan on 5/25/17.
|
||||
* <p>
|
||||
* 条目的点击事件
|
||||
*/
|
||||
|
||||
public interface OnItemClickListener {
|
||||
void onItemClick(int position);
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
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 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 boolean canClick() {
|
||||
return ClickUtil.canClick();
|
||||
}
|
||||
|
||||
public List<T> getList() {
|
||||
return mList;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
29
common/src/main/java/com/yunbao/common/bean/AdBean.java
Normal file
29
common/src/main/java/com/yunbao/common/bean/AdBean.java
Normal file
@@ -0,0 +1,29 @@
|
||||
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;
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
52
common/src/main/java/com/yunbao/common/bean/BannerBean.java
Normal file
52
common/src/main/java/com/yunbao/common/bean/BannerBean.java
Normal file
@@ -0,0 +1,52 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2019/3/30.
|
||||
*/
|
||||
|
||||
public class BannerBean {
|
||||
private String mImageUrl;
|
||||
private String mLink;
|
||||
private String show_type;
|
||||
private String mIntoUrl;
|
||||
|
||||
public String getShow_type() {
|
||||
return show_type;
|
||||
}
|
||||
|
||||
public void setShow_type(String show_type) {
|
||||
this.show_type = show_type;
|
||||
}
|
||||
|
||||
@JSONField(name = "slide_pic")
|
||||
public String getImageUrl() {
|
||||
return mImageUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "slide_pic")
|
||||
public void setImageUrl(String imageUrl) {
|
||||
mImageUrl = imageUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "slide_url")
|
||||
public String getLink() {
|
||||
return mLink;
|
||||
}
|
||||
|
||||
@JSONField(name = "slide_url")
|
||||
public void setLink(String link) {
|
||||
mLink = link;
|
||||
}
|
||||
|
||||
@JSONField(name = "href")
|
||||
public String getmIntoUrl() {
|
||||
return mIntoUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "href")
|
||||
public void setmIntoUrl(String intoUrl) {
|
||||
mIntoUrl = intoUrl;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
public class ChatRemarksBean {
|
||||
String userId;
|
||||
String remarks;
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getRemarks() {
|
||||
return remarks;
|
||||
}
|
||||
|
||||
public void setRemarks(String remarks) {
|
||||
this.remarks = remarks;
|
||||
}
|
||||
|
||||
public ChatRemarksBean() {
|
||||
}
|
||||
|
||||
public ChatRemarksBean(String userId, String remarks) {
|
||||
this.userId = userId;
|
||||
this.remarks = remarks;
|
||||
}
|
||||
}
|
||||
108
common/src/main/java/com/yunbao/common/bean/CoinBean.java
Normal file
108
common/src/main/java/com/yunbao/common/bean/CoinBean.java
Normal file
@@ -0,0 +1,108 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/9/21.
|
||||
*/
|
||||
|
||||
public class CoinBean implements Parcelable{
|
||||
|
||||
private String id;
|
||||
private String coin;
|
||||
private String money;
|
||||
private String give;
|
||||
private String money_usd;
|
||||
private boolean checked;
|
||||
|
||||
public CoinBean(){
|
||||
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getCoin() {
|
||||
return coin;
|
||||
}
|
||||
|
||||
public void setCoin(String coin) {
|
||||
this.coin = coin;
|
||||
}
|
||||
|
||||
public String getMoney() {
|
||||
return money;
|
||||
}
|
||||
|
||||
public void setMoney(String money) {
|
||||
this.money = money;
|
||||
}
|
||||
|
||||
public String getGive() {
|
||||
return give;
|
||||
}
|
||||
|
||||
public void setGive(String give) {
|
||||
this.give = give;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
return checked;
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
|
||||
|
||||
public String getMoney_usd() {
|
||||
return money_usd;
|
||||
}
|
||||
|
||||
public void setMoney_usd(String money_usd) {
|
||||
this.money_usd = money_usd;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public CoinBean(Parcel in) {
|
||||
id = in.readString();
|
||||
coin = in.readString();
|
||||
money = in.readString();
|
||||
give = in.readString();
|
||||
money_usd= in.readString();
|
||||
checked = in.readByte() != 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(id);
|
||||
dest.writeString(coin);
|
||||
dest.writeString(money);
|
||||
dest.writeString(give);
|
||||
dest.writeString(money_usd);
|
||||
dest.writeByte((byte) (checked ? 1 : 0));
|
||||
}
|
||||
|
||||
public static final Creator<CoinBean> CREATOR = new Creator<CoinBean>() {
|
||||
@Override
|
||||
public CoinBean createFromParcel(Parcel in) {
|
||||
return new CoinBean(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoinBean[] newArray(int size) {
|
||||
return new CoinBean[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
92
common/src/main/java/com/yunbao/common/bean/CoinPayBean.java
Normal file
92
common/src/main/java/com/yunbao/common/bean/CoinPayBean.java
Normal file
@@ -0,0 +1,92 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2019/4/11.
|
||||
*/
|
||||
|
||||
public class CoinPayBean {
|
||||
private String mId;
|
||||
private String mName;
|
||||
private String mThumb;
|
||||
private String mHref;
|
||||
private boolean mChecked;
|
||||
private String mPayDesc;//支付描述,如推荐大额
|
||||
private String mPriceNum;//显示价格的数量
|
||||
|
||||
@JSONField(name = "id")
|
||||
public String getId() {
|
||||
return mId;
|
||||
}
|
||||
|
||||
@JSONField(name = "id")
|
||||
public void setId(String id) {
|
||||
mId = id;
|
||||
}
|
||||
|
||||
@JSONField(name = "name")
|
||||
public String getName() {
|
||||
return mName;
|
||||
}
|
||||
|
||||
@JSONField(name = "name")
|
||||
public void setName(String name) {
|
||||
mName = name;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@JSONField(name = "payDesc")
|
||||
public String getPayDesc() {
|
||||
return mPayDesc;
|
||||
}
|
||||
|
||||
@JSONField(name = "payDesc")
|
||||
public void setPayDesc(String payDesc) {
|
||||
mPayDesc = payDesc;
|
||||
}
|
||||
|
||||
|
||||
@JSONField(name = "priceNum")
|
||||
public String getPriceNum() {
|
||||
return mPriceNum;
|
||||
}
|
||||
|
||||
@JSONField(name = "priceNum")
|
||||
public void setPriceNum(String priceNum) {
|
||||
mPriceNum = priceNum;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@JSONField(name = "thumb")
|
||||
public String getThumb() {
|
||||
return mThumb;
|
||||
}
|
||||
|
||||
@JSONField(name = "thumb")
|
||||
public void setThumb(String thumb) {
|
||||
mThumb = thumb;
|
||||
}
|
||||
|
||||
@JSONField(name = "href")
|
||||
public String getHref() {
|
||||
return mHref;
|
||||
}
|
||||
|
||||
@JSONField(name = "href")
|
||||
public void setHref(String href) {
|
||||
mHref = href;
|
||||
}
|
||||
|
||||
@JSONField(serialize = false)
|
||||
public boolean isChecked() {
|
||||
return mChecked;
|
||||
}
|
||||
|
||||
@JSONField(serialize = false)
|
||||
public void setChecked(boolean checked) {
|
||||
mChecked = checked;
|
||||
}
|
||||
}
|
||||
566
common/src/main/java/com/yunbao/common/bean/ConfigBean.java
Normal file
566
common/src/main/java/com/yunbao/common/bean/ConfigBean.java
Normal file
@@ -0,0 +1,566 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/8/5.
|
||||
*/
|
||||
|
||||
public class ConfigBean {
|
||||
private String version;//Android apk安装包 版本号
|
||||
private String downloadApkUrl;//Android apk安装包 下载地址
|
||||
private String updateDes;//版本更新描述
|
||||
private String liveWxShareUrl;//直播间微信分享地址
|
||||
private String liveShareTitle;//直播间分享标题
|
||||
private String liveShareDes;//直播间分享描述
|
||||
private String videoShareTitle;//短视频分享标题
|
||||
private String videoShareDes;//短视频分享描述
|
||||
private int videoAuditSwitch;//短视频审核是否开启
|
||||
private int videoCloudType;//短视频云储存类型 1七牛云 2腾讯云
|
||||
private String videoQiNiuHost;//短视频七牛云域名
|
||||
private String txCosAppId;//腾讯云存储appId
|
||||
private String txCosRegion;//腾讯云存储区域
|
||||
private String txCosBucketName;//腾讯云存储桶名字
|
||||
private String txCosVideoPath;//腾讯云存储视频文件夹
|
||||
private String txCosImagePath;//腾讯云存储图片文件夹
|
||||
private String coinName;//钻石名称
|
||||
private String goldCoinName;//金币名称
|
||||
private String votesName;//映票名称
|
||||
private String[] liveTimeCoin;//直播间计时收费规则
|
||||
private String[] loginType;//三方登录类型
|
||||
private String[][] liveType;//直播间开播类型
|
||||
private String[] shareType;//分享类型
|
||||
private List<LiveClassBean> liveClass;//直播分类
|
||||
private int maintainSwitch;//维护开关
|
||||
private String maintainTips;//维护提示
|
||||
private String beautyKey;//萌颜鉴权码
|
||||
private int beautyMeiBai;//萌颜美白数值
|
||||
private int beautyMoPi;//萌颜磨皮数值
|
||||
private int beautyBaoHe;//萌颜饱和数值
|
||||
private int beautyFenNen;//萌颜粉嫩数值
|
||||
private int beautyBigEye;//萌颜大眼数值
|
||||
private int beautyFace;//萌颜瘦脸数值
|
||||
private int faceNarrowing;//窄脸
|
||||
private String mAdInfo;//引导页 广告信息
|
||||
private int priMsgSwitch;//私信开关
|
||||
private int forceUpdate;//强制更新
|
||||
private String sproutType;//美颜类型,1-基础美颜,2-萌颜,3-360美颜
|
||||
|
||||
private String paster360Url;//360贴纸下载地址
|
||||
private String pkTime;//主播pk时间
|
||||
private String serverUrl;//客服地址
|
||||
private String AllServerGiftIcon;//全服通知横幅icon
|
||||
private String turntableEnable;//转盘使能
|
||||
private String txVideoUgcLicenceUrl;//腾讯直播视频鉴权
|
||||
private String txPlayUgcLicenceUrl;//腾讯短视频鉴权
|
||||
private String txVideoUgcKey;
|
||||
|
||||
@JSONField(name = "tx_play_ugc_licence_url")
|
||||
public String getTxPlayUgcLicenceUrl() {
|
||||
return txPlayUgcLicenceUrl;
|
||||
}
|
||||
@JSONField(name = "tx_play_ugc_licence_url")
|
||||
public void setTxPlayUgcLicenceUrl(String txPlayUgcLicenceUrl) {
|
||||
this.txPlayUgcLicenceUrl = txPlayUgcLicenceUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ConfigBean{" +
|
||||
"version='" + version + '\'' +
|
||||
", downloadApkUrl='" + downloadApkUrl + '\'' +
|
||||
", updateDes='" + updateDes + '\'' +
|
||||
", liveWxShareUrl='" + liveWxShareUrl + '\'' +
|
||||
", liveShareTitle='" + liveShareTitle + '\'' +
|
||||
", liveShareDes='" + liveShareDes + '\'' +
|
||||
", videoShareTitle='" + videoShareTitle + '\'' +
|
||||
", videoShareDes='" + videoShareDes + '\'' +
|
||||
", videoAuditSwitch=" + videoAuditSwitch +
|
||||
", videoCloudType=" + videoCloudType +
|
||||
", videoQiNiuHost='" + videoQiNiuHost + '\'' +
|
||||
", txCosAppId='" + txCosAppId + '\'' +
|
||||
", txCosRegion='" + txCosRegion + '\'' +
|
||||
", txCosBucketName='" + txCosBucketName + '\'' +
|
||||
", txCosVideoPath='" + txCosVideoPath + '\'' +
|
||||
", txCosImagePath='" + txCosImagePath + '\'' +
|
||||
", coinName='" + coinName + '\'' +
|
||||
", goldCoinName='" + goldCoinName + '\'' +
|
||||
", votesName='" + votesName + '\'' +
|
||||
", liveTimeCoin=" + Arrays.toString(liveTimeCoin) +
|
||||
", loginType=" + Arrays.toString(loginType) +
|
||||
", liveType=" + Arrays.toString(liveType) +
|
||||
", shareType=" + Arrays.toString(shareType) +
|
||||
", liveClass=" + liveClass +
|
||||
", maintainSwitch=" + maintainSwitch +
|
||||
", maintainTips='" + maintainTips + '\'' +
|
||||
", beautyKey='" + beautyKey + '\'' +
|
||||
", beautyMeiBai=" + beautyMeiBai +
|
||||
", beautyMoPi=" + beautyMoPi +
|
||||
", beautyBaoHe=" + beautyBaoHe +
|
||||
", beautyFenNen=" + beautyFenNen +
|
||||
", beautyBigEye=" + beautyBigEye +
|
||||
", beautyFace=" + beautyFace +
|
||||
", faceNarrowing=" + faceNarrowing +
|
||||
", mAdInfo='" + mAdInfo + '\'' +
|
||||
", priMsgSwitch=" + priMsgSwitch +
|
||||
", forceUpdate=" + forceUpdate +
|
||||
", sproutType='" + sproutType + '\'' +
|
||||
", paster360Url='" + paster360Url + '\'' +
|
||||
", pkTime='" + pkTime + '\'' +
|
||||
", serverUrl='" + serverUrl + '\'' +
|
||||
", AllServerGiftIcon='" + AllServerGiftIcon + '\'' +
|
||||
", turntableEnable='" + turntableEnable + '\'' +
|
||||
", txVideoUgcLicenceUrl='" + txVideoUgcLicenceUrl + '\'' +
|
||||
", txVideoUgcKey='" + txVideoUgcKey + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
@JSONField(name = "apk_ver")
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
@JSONField(name = "apk_ver")
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
@JSONField(name = "apk_url")
|
||||
public String getDownloadApkUrl() {
|
||||
return downloadApkUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "apk_url")
|
||||
public void setDownloadApkUrl(String downloadApkUrl) {
|
||||
this.downloadApkUrl = downloadApkUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "apk_des")
|
||||
public String getUpdateDes() {
|
||||
return updateDes;
|
||||
}
|
||||
|
||||
@JSONField(name = "apk_des")
|
||||
public void setUpdateDes(String updateDes) {
|
||||
this.updateDes = updateDes;
|
||||
}
|
||||
|
||||
@JSONField(name = "wx_siteurl")
|
||||
public void setLiveWxShareUrl(String liveWxShareUrl) {
|
||||
this.liveWxShareUrl = liveWxShareUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "wx_siteurl")
|
||||
public String getLiveWxShareUrl() {
|
||||
return liveWxShareUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "share_title")
|
||||
public String getLiveShareTitle() {
|
||||
return liveShareTitle;
|
||||
}
|
||||
|
||||
@JSONField(name = "share_title")
|
||||
public void setLiveShareTitle(String liveShareTitle) {
|
||||
this.liveShareTitle = liveShareTitle;
|
||||
}
|
||||
|
||||
@JSONField(name = "share_des")
|
||||
public String getLiveShareDes() {
|
||||
return liveShareDes;
|
||||
}
|
||||
|
||||
@JSONField(name = "share_des")
|
||||
public void setLiveShareDes(String liveShareDes) {
|
||||
this.liveShareDes = liveShareDes;
|
||||
}
|
||||
|
||||
@JSONField(name = "name_coin")
|
||||
public String getCoinName() {
|
||||
return coinName;
|
||||
}
|
||||
|
||||
@JSONField(name = "name_coin")
|
||||
public void setCoinName(String coinName) {
|
||||
this.coinName = coinName;
|
||||
}
|
||||
|
||||
@JSONField(name = "name_votes")
|
||||
public String getVotesName() {
|
||||
return votesName;
|
||||
}
|
||||
|
||||
@JSONField(name = "name_votes")
|
||||
public void setVotesName(String votesName) {
|
||||
this.votesName = votesName;
|
||||
}
|
||||
|
||||
@JSONField(name = "live_time_coin")
|
||||
public String[] getLiveTimeCoin() {
|
||||
return liveTimeCoin;
|
||||
}
|
||||
|
||||
@JSONField(name = "live_time_coin")
|
||||
public void setLiveTimeCoin(String[] liveTimeCoin) {
|
||||
this.liveTimeCoin = liveTimeCoin;
|
||||
}
|
||||
|
||||
@JSONField(name = "login_type")
|
||||
public String[] getLoginType() {
|
||||
return loginType;
|
||||
}
|
||||
|
||||
|
||||
@JSONField(name = "login_type")
|
||||
public void setLoginType(String[] loginType) {
|
||||
this.loginType = loginType;
|
||||
}
|
||||
|
||||
@JSONField(name = "live_type")
|
||||
public String[][] getLiveType() {
|
||||
return liveType;
|
||||
}
|
||||
|
||||
@JSONField(name = "live_type")
|
||||
public void setLiveType(String[][] liveType) {
|
||||
this.liveType = liveType;
|
||||
}
|
||||
|
||||
@JSONField(name = "share_type")
|
||||
public String[] getShareType() {
|
||||
return shareType;
|
||||
}
|
||||
|
||||
@JSONField(name = "share_type")
|
||||
public void setShareType(String[] shareType) {
|
||||
this.shareType = shareType;
|
||||
}
|
||||
|
||||
@JSONField(name = "liveclass")
|
||||
public List<LiveClassBean> getLiveClass() {
|
||||
return liveClass;
|
||||
}
|
||||
|
||||
@JSONField(name = "liveclass")
|
||||
public void setLiveClass(List<LiveClassBean> liveClass) {
|
||||
this.liveClass = liveClass;
|
||||
}
|
||||
|
||||
@JSONField(name = "maintain_switch")
|
||||
public int getMaintainSwitch() {
|
||||
return maintainSwitch;
|
||||
}
|
||||
|
||||
@JSONField(name = "maintain_switch")
|
||||
public void setMaintainSwitch(int maintainSwitch) {
|
||||
this.maintainSwitch = maintainSwitch;
|
||||
}
|
||||
|
||||
@JSONField(name = "maintain_tips")
|
||||
public String getMaintainTips() {
|
||||
return maintainTips;
|
||||
}
|
||||
|
||||
@JSONField(name = "maintain_tips")
|
||||
public void setMaintainTips(String maintainTips) {
|
||||
this.maintainTips = maintainTips;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_key")
|
||||
public String getBeautyKey() {
|
||||
return beautyKey;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_key")
|
||||
public void setBeautyKey(String beautyKey) {
|
||||
this.beautyKey = beautyKey;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_white")
|
||||
public int getBeautyMeiBai() {
|
||||
return beautyMeiBai;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_white")
|
||||
public void setBeautyMeiBai(int beautyMeiBai) {
|
||||
this.beautyMeiBai = beautyMeiBai;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_skin")
|
||||
public int getBeautyMoPi() {
|
||||
return beautyMoPi;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_skin")
|
||||
public void setBeautyMoPi(int beautyMoPi) {
|
||||
this.beautyMoPi = beautyMoPi;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_saturated")
|
||||
public int getBeautyBaoHe() {
|
||||
return beautyBaoHe;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_saturated")
|
||||
public void setBeautyBaoHe(int beautyBaoHe) {
|
||||
this.beautyBaoHe = beautyBaoHe;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_pink")
|
||||
public int getBeautyFenNen() {
|
||||
return beautyFenNen;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_pink")
|
||||
public void setBeautyFenNen(int beautyFenNen) {
|
||||
this.beautyFenNen = beautyFenNen;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_eye")
|
||||
public int getBeautyBigEye() {
|
||||
return beautyBigEye;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_eye")
|
||||
public void setBeautyBigEye(int beautyBigEye) {
|
||||
this.beautyBigEye = beautyBigEye;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_face")
|
||||
public int getBeautyFace() {
|
||||
return beautyFace;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_face")
|
||||
public void setBeautyFace(int beautyFace) {
|
||||
this.beautyFace = beautyFace;
|
||||
}
|
||||
@JSONField(name = "sprout_face_narrowing")
|
||||
public int getBeautyFaceNarrowing() {
|
||||
return faceNarrowing;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_face_narrowing")
|
||||
public void setBeautyFaceNarrowing(int faceNarrowing) {
|
||||
this.faceNarrowing = faceNarrowing;
|
||||
}
|
||||
|
||||
public String[] getVideoShareTypes() {
|
||||
return shareType;
|
||||
}
|
||||
|
||||
@JSONField(name = "video_share_title")
|
||||
public String getVideoShareTitle() {
|
||||
return videoShareTitle;
|
||||
}
|
||||
|
||||
@JSONField(name = "video_share_title")
|
||||
public void setVideoShareTitle(String videoShareTitle) {
|
||||
this.videoShareTitle = videoShareTitle;
|
||||
}
|
||||
|
||||
@JSONField(name = "video_share_des")
|
||||
public String getVideoShareDes() {
|
||||
return videoShareDes;
|
||||
}
|
||||
|
||||
@JSONField(name = "video_share_des")
|
||||
public void setVideoShareDes(String videoShareDes) {
|
||||
this.videoShareDes = videoShareDes;
|
||||
}
|
||||
|
||||
@JSONField(name = "video_audit_switch")
|
||||
public int getVideoAuditSwitch() {
|
||||
return videoAuditSwitch;
|
||||
}
|
||||
|
||||
@JSONField(name = "video_audit_switch")
|
||||
public void setVideoAuditSwitch(int videoAuditSwitch) {
|
||||
this.videoAuditSwitch = videoAuditSwitch;
|
||||
}
|
||||
|
||||
@JSONField(name = "cloudtype")
|
||||
public int getVideoCloudType() {
|
||||
return videoCloudType;
|
||||
}
|
||||
|
||||
@JSONField(name = "cloudtype")
|
||||
public void setVideoCloudType(int videoCloudType) {
|
||||
this.videoCloudType = videoCloudType;
|
||||
}
|
||||
|
||||
@JSONField(name = "qiniu_domain")
|
||||
public String getVideoQiNiuHost() {
|
||||
return videoQiNiuHost;
|
||||
}
|
||||
|
||||
@JSONField(name = "qiniu_domain")
|
||||
public void setVideoQiNiuHost(String videoQiNiuHost) {
|
||||
this.videoQiNiuHost = videoQiNiuHost;
|
||||
}
|
||||
|
||||
@JSONField(name = "txcloud_appid")
|
||||
public String getTxCosAppId() {
|
||||
return txCosAppId;
|
||||
}
|
||||
|
||||
@JSONField(name = "txcloud_appid")
|
||||
public void setTxCosAppId(String txCosAppId) {
|
||||
this.txCosAppId = txCosAppId;
|
||||
}
|
||||
|
||||
@JSONField(name = "txcloud_region")
|
||||
public String getTxCosRegion() {
|
||||
return txCosRegion;
|
||||
}
|
||||
|
||||
@JSONField(name = "txcloud_region")
|
||||
public void setTxCosRegion(String txCosRegion) {
|
||||
this.txCosRegion = txCosRegion;
|
||||
}
|
||||
|
||||
@JSONField(name = "txcloud_bucket")
|
||||
public String getTxCosBucketName() {
|
||||
return txCosBucketName;
|
||||
}
|
||||
|
||||
@JSONField(name = "txcloud_bucket")
|
||||
public void setTxCosBucketName(String txCosBucketName) {
|
||||
this.txCosBucketName = txCosBucketName;
|
||||
}
|
||||
|
||||
@JSONField(name = "txvideofolder")
|
||||
public String getTxCosVideoPath() {
|
||||
return txCosVideoPath;
|
||||
}
|
||||
|
||||
@JSONField(name = "txvideofolder")
|
||||
public void setTxCosVideoPath(String txCosVideoPath) {
|
||||
this.txCosVideoPath = txCosVideoPath;
|
||||
}
|
||||
|
||||
@JSONField(name = "tximgfolder")
|
||||
public String getTxCosImagePath() {
|
||||
return txCosImagePath;
|
||||
}
|
||||
|
||||
@JSONField(name = "tximgfolder")
|
||||
public void setTxCosImagePath(String txCosImagePath) {
|
||||
this.txCosImagePath = txCosImagePath;
|
||||
}
|
||||
|
||||
@JSONField(name = "guide")
|
||||
public String getAdInfo() {
|
||||
return mAdInfo;
|
||||
}
|
||||
@JSONField(name = "guide")
|
||||
public void setAdInfo(String adInfo) {
|
||||
mAdInfo = adInfo;
|
||||
}
|
||||
@JSONField(name = "letter_switch")
|
||||
public int getPriMsgSwitch() {
|
||||
return priMsgSwitch;
|
||||
}
|
||||
@JSONField(name = "letter_switch")
|
||||
public void setPriMsgSwitch(int priMsgSwitch) {
|
||||
this.priMsgSwitch = priMsgSwitch;
|
||||
}
|
||||
@JSONField(name = "isup")
|
||||
public int getForceUpdate() {
|
||||
return forceUpdate;
|
||||
}
|
||||
@JSONField(name = "isup")
|
||||
public void setForceUpdate(int forceUpdate) {
|
||||
this.forceUpdate = forceUpdate;
|
||||
}
|
||||
|
||||
@JSONField(name = "sprout_type")
|
||||
public String getSproutType() {
|
||||
return sproutType;
|
||||
}
|
||||
@JSONField(name = "sprout_type")
|
||||
public void setSproutType(String sprout_type) {
|
||||
this.sproutType = sprout_type;
|
||||
}
|
||||
|
||||
@JSONField(name = "turntable_enable")
|
||||
public String getTurntableEnable() {
|
||||
return turntableEnable;
|
||||
}
|
||||
@JSONField(name = "turntable_enable")
|
||||
public void setTurntableEnable(String turntable) {
|
||||
this.turntableEnable = turntable;
|
||||
}
|
||||
|
||||
|
||||
@JSONField(name = "tx_video_ugc_licence_url")
|
||||
public String getTxVideoUgcLicenceUrl() {
|
||||
return txVideoUgcLicenceUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "tx_video_ugc_licence_url")
|
||||
public void setTxVideoUgcLicenceUrl(String txVideoUgcLicenceUrl) {
|
||||
this.txVideoUgcLicenceUrl = txVideoUgcLicenceUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "tx_video_ugc_key")
|
||||
public String getTxVideoUgcKey() {
|
||||
return txVideoUgcKey;
|
||||
}
|
||||
|
||||
@JSONField(name = "tx_video_ugc_key")
|
||||
public void setTxVideoUgcKey(String txVideoUgcKey) {
|
||||
this.txVideoUgcKey = txVideoUgcKey;
|
||||
}
|
||||
|
||||
@JSONField(name = "360_paster_url")
|
||||
public String getPaster360Url() {
|
||||
return paster360Url;
|
||||
}
|
||||
@JSONField(name = "360_paster_url")
|
||||
public void setPaster360Url(String paster360Url) {
|
||||
this.paster360Url = paster360Url;
|
||||
}
|
||||
|
||||
@JSONField(name = "live_pk_time")
|
||||
public String getPkTime() {
|
||||
return pkTime;
|
||||
}
|
||||
@JSONField(name = "live_pk_time")
|
||||
public void setPkTime(String time) {
|
||||
this.pkTime = time;
|
||||
}
|
||||
|
||||
|
||||
@JSONField(name = "service_url")
|
||||
public String getCustomerServerUrl() {
|
||||
return serverUrl;
|
||||
}
|
||||
@JSONField(name = "service_url")
|
||||
public void setCustomerServerUrl(String serverUrl) {
|
||||
this.serverUrl = serverUrl;
|
||||
}
|
||||
|
||||
@JSONField(name = "AllServerGiftIcon")
|
||||
public String getAllServerGiftIcon() {
|
||||
return AllServerGiftIcon;
|
||||
}
|
||||
|
||||
@JSONField(name = "AllServerGiftIcon")
|
||||
public void setAllServerGiftIcon(String allServerGiftIcon) {
|
||||
AllServerGiftIcon = allServerGiftIcon;
|
||||
}
|
||||
|
||||
@JSONField(name = "goldCoinName")
|
||||
public String getGoldCoinName() {
|
||||
return goldCoinName;
|
||||
}
|
||||
|
||||
@JSONField(name = "goldCoinName")
|
||||
public void setGoldCoinName(String goldCoinName) {
|
||||
this.goldCoinName = goldCoinName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/10/9.
|
||||
*/
|
||||
|
||||
public class FansMedalBean {
|
||||
private int level;
|
||||
private String thumb;
|
||||
private String color;
|
||||
private String thumbIcon;
|
||||
private String bgIcon;
|
||||
|
||||
@JSONField(name = "levelid")
|
||||
public int getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@JSONField(name = "levelid")
|
||||
public void setLevel(int level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
@JSONField(name = "thumb")
|
||||
public String getThumb() {
|
||||
return thumb;
|
||||
}
|
||||
|
||||
@JSONField(name = "thumb")
|
||||
public void setThumb(String thumb) {
|
||||
this.thumb = thumb;
|
||||
}
|
||||
|
||||
@JSONField(name = "colour")
|
||||
public String getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
@JSONField(name = "colour")
|
||||
public void setColor(String color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
@JSONField(name = "thumb_mark")
|
||||
public String getThumbIcon() {
|
||||
return thumbIcon;
|
||||
}
|
||||
|
||||
@JSONField(name = "thumb_mark")
|
||||
public void setThumbIcon(String thumbIcon) {
|
||||
this.thumbIcon = thumbIcon;
|
||||
}
|
||||
@JSONField(name = "bg")
|
||||
public String getBgIcon() {
|
||||
return bgIcon;
|
||||
}
|
||||
@JSONField(name = "bg")
|
||||
public void setBgIcon(String bgIcon) {
|
||||
this.bgIcon = bgIcon;
|
||||
}
|
||||
}
|
||||
42
common/src/main/java/com/yunbao/common/bean/GoogleBean.java
Normal file
42
common/src/main/java/com/yunbao/common/bean/GoogleBean.java
Normal file
@@ -0,0 +1,42 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GoogleBean {
|
||||
private String id;
|
||||
private String terminal;
|
||||
private String charge_type;
|
||||
private String is_hide;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getTerminal() {
|
||||
return terminal;
|
||||
}
|
||||
|
||||
public void setTerminal(String terminal) {
|
||||
this.terminal = terminal;
|
||||
}
|
||||
|
||||
public String getCharge_type() {
|
||||
return charge_type;
|
||||
}
|
||||
|
||||
public void setCharge_type(String charge_type) {
|
||||
this.charge_type = charge_type;
|
||||
}
|
||||
|
||||
public String getIs_hide() {
|
||||
return is_hide;
|
||||
}
|
||||
|
||||
public void setIs_hide(String is_hide) {
|
||||
this.is_hide = is_hide;
|
||||
}
|
||||
}
|
||||
125
common/src/main/java/com/yunbao/common/bean/ImageEntity.java
Normal file
125
common/src/main/java/com/yunbao/common/bean/ImageEntity.java
Normal file
@@ -0,0 +1,125 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
/**
|
||||
* Created by Chen Haoxuan on 2022/4/30.
|
||||
* Description:
|
||||
*/
|
||||
public class ImageEntity implements Parcelable {
|
||||
|
||||
private int id;
|
||||
private String path;
|
||||
private String thumbPath;
|
||||
private boolean isSelect;
|
||||
private String folderName;
|
||||
private String name;
|
||||
private long date;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public void setPath(String path) {
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public String getThumbPath() {
|
||||
return thumbPath;
|
||||
}
|
||||
|
||||
public void setThumbPath(String thumbPath) {
|
||||
this.thumbPath = thumbPath;
|
||||
}
|
||||
|
||||
public boolean isSelect() {
|
||||
return isSelect;
|
||||
}
|
||||
|
||||
public void setSelect(boolean select) {
|
||||
isSelect = select;
|
||||
}
|
||||
|
||||
public String getFolderName() {
|
||||
return folderName;
|
||||
}
|
||||
|
||||
public void setFolderName(String folderName) {
|
||||
this.folderName = folderName;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public long getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(long date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o instanceof ImageEntity) {
|
||||
return this.path.equals(((ImageEntity) o).getPath());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(this.id);
|
||||
dest.writeString(this.path);
|
||||
dest.writeString(this.thumbPath);
|
||||
dest.writeByte(this.isSelect ? (byte) 1 : (byte) 0);
|
||||
dest.writeString(this.folderName);
|
||||
dest.writeString(this.name);
|
||||
dest.writeLong(this.date);
|
||||
}
|
||||
|
||||
public ImageEntity() {
|
||||
}
|
||||
|
||||
protected ImageEntity(Parcel in) {
|
||||
this.id = in.readInt();
|
||||
this.path = in.readString();
|
||||
this.thumbPath = in.readString();
|
||||
this.isSelect = in.readByte() != 0;
|
||||
this.folderName = in.readString();
|
||||
this.name = in.readString();
|
||||
this.date = in.readLong();
|
||||
|
||||
}
|
||||
|
||||
public static final Creator<ImageEntity> CREATOR = new Creator<ImageEntity>() {
|
||||
@Override
|
||||
public ImageEntity createFromParcel(Parcel source) {
|
||||
return new ImageEntity(source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImageEntity[] newArray(int size) {
|
||||
return new ImageEntity[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Chen Haoxuan on 2022/4/30.
|
||||
*
|
||||
*/
|
||||
public class ImageFolderEntity {
|
||||
private String name;
|
||||
private String path;
|
||||
private String albumPath;
|
||||
private ArrayList<ImageEntity> images = new ArrayList<>();
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public void setPath(String path) {
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public ArrayList<ImageEntity> getImages() {
|
||||
return images;
|
||||
}
|
||||
|
||||
public String getAlbumPath() {
|
||||
return albumPath;
|
||||
}
|
||||
|
||||
public void setAlbumPath(String albumPath) {
|
||||
this.albumPath = albumPath;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o != null && o instanceof ImageFolderEntity) {
|
||||
if (((ImageFolderEntity) o).getPath() == null && path != null)
|
||||
return false;
|
||||
String oPath = ((ImageFolderEntity) o).getPath().toLowerCase();
|
||||
return oPath.equals(this.path.toLowerCase());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
public class JsTurnTableBean {
|
||||
String giftId;
|
||||
|
||||
public JsTurnTableBean(String giftId) {
|
||||
this.giftId = giftId;
|
||||
}
|
||||
|
||||
public String getGiftId() {
|
||||
return giftId;
|
||||
}
|
||||
|
||||
public void setGiftId(String giftId) {
|
||||
this.giftId = giftId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
public class JsTurnTableBean2 {
|
||||
String giftId;
|
||||
|
||||
public JsTurnTableBean2(String giftId) {
|
||||
this.giftId = giftId;
|
||||
}
|
||||
|
||||
public String getGiftId() {
|
||||
return giftId;
|
||||
}
|
||||
|
||||
public void setGiftId(String giftId) {
|
||||
this.giftId = giftId;
|
||||
}
|
||||
}
|
||||
17
common/src/main/java/com/yunbao/common/bean/JsWishBean.java
Normal file
17
common/src/main/java/com/yunbao/common/bean/JsWishBean.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
public class JsWishBean {
|
||||
String giftId;
|
||||
|
||||
public JsWishBean(String giftId) {
|
||||
this.giftId = giftId;
|
||||
}
|
||||
|
||||
public String getGiftId() {
|
||||
return giftId;
|
||||
}
|
||||
|
||||
public void setGiftId(String giftId) {
|
||||
this.giftId = giftId;
|
||||
}
|
||||
}
|
||||
61
common/src/main/java/com/yunbao/common/bean/LevelBean.java
Normal file
61
common/src/main/java/com/yunbao/common/bean/LevelBean.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/10/9.
|
||||
*/
|
||||
|
||||
public class LevelBean {
|
||||
private int level;
|
||||
private String thumb;
|
||||
private String color;
|
||||
private String thumbIcon;
|
||||
private String bgIcon;
|
||||
|
||||
@JSONField(name = "levelid")
|
||||
public int getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@JSONField(name = "levelid")
|
||||
public void setLevel(int level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public String getThumb() {
|
||||
return thumb;
|
||||
}
|
||||
|
||||
public void setThumb(String thumb) {
|
||||
this.thumb = thumb;
|
||||
}
|
||||
|
||||
@JSONField(name = "colour")
|
||||
public String getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
@JSONField(name = "colour")
|
||||
public void setColor(String color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
@JSONField(name = "thumb_mark")
|
||||
public String getThumbIcon() {
|
||||
return thumbIcon;
|
||||
}
|
||||
|
||||
@JSONField(name = "thumb_mark")
|
||||
public void setThumbIcon(String thumbIcon) {
|
||||
this.thumbIcon = thumbIcon;
|
||||
}
|
||||
@JSONField(name = "bg")
|
||||
public String getBgIcon() {
|
||||
return bgIcon;
|
||||
}
|
||||
@JSONField(name = "bg")
|
||||
public void setBgIcon(String bgIcon) {
|
||||
this.bgIcon = bgIcon;
|
||||
}
|
||||
}
|
||||
127
common/src/main/java/com/yunbao/common/bean/LiveChatBean.java
Normal file
127
common/src/main/java/com/yunbao/common/bean/LiveChatBean.java
Normal file
@@ -0,0 +1,127 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/8/22.
|
||||
*/
|
||||
|
||||
public class LiveChatBean {
|
||||
|
||||
public static final int NORMAL = 0;
|
||||
public static final int SYSTEM = 1;
|
||||
public static final int GIFT = 2;
|
||||
public static final int ENTER_ROOM = 3;
|
||||
public static final int LIGHT = 4;
|
||||
public static final int RED_PACK = 5;
|
||||
|
||||
private String id;
|
||||
private String userNiceName;
|
||||
private int level;
|
||||
private String content;
|
||||
private int heart;
|
||||
private int type; //0是普通消息 1是系统消息 2是礼物消息
|
||||
private String liangName;
|
||||
private int vipType;
|
||||
private int guardType;
|
||||
private boolean anchor;
|
||||
private boolean manager;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@JSONField(name = "user_nicename")
|
||||
public String getUserNiceName() {
|
||||
return userNiceName;
|
||||
}
|
||||
|
||||
@JSONField(name = "user_nicename")
|
||||
public void setUserNiceName(String userNiceName) {
|
||||
this.userNiceName = userNiceName;
|
||||
}
|
||||
|
||||
public int getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel(int level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public int getHeart() {
|
||||
return heart;
|
||||
}
|
||||
|
||||
public void setHeart(int heart) {
|
||||
this.heart = heart;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@JSONField(name = "liangname")
|
||||
public String getLiangName() {
|
||||
return liangName;
|
||||
}
|
||||
|
||||
@JSONField(name = "liangname")
|
||||
public void setLiangName(String liangName) {
|
||||
if(!"0".equals(liangName)){
|
||||
this.liangName = liangName;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isAnchor() {
|
||||
return anchor;
|
||||
}
|
||||
|
||||
public void setAnchor(boolean anchor) {
|
||||
this.anchor = anchor;
|
||||
}
|
||||
|
||||
@JSONField(name = "vip_type")
|
||||
public int getVipType() {
|
||||
return vipType;
|
||||
}
|
||||
|
||||
@JSONField(name = "vip_type")
|
||||
public void setVipType(int vipType) {
|
||||
this.vipType = vipType;
|
||||
}
|
||||
|
||||
public boolean isManager() {
|
||||
return manager;
|
||||
}
|
||||
|
||||
public void setManager(boolean manager) {
|
||||
this.manager = manager;
|
||||
}
|
||||
|
||||
@JSONField(name = "guard_type")
|
||||
public int getGuardType() {
|
||||
return guardType;
|
||||
}
|
||||
|
||||
@JSONField(name = "guard_type")
|
||||
public void setGuardType(int guardType) {
|
||||
this.guardType = guardType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/25.
|
||||
*/
|
||||
|
||||
public class LiveClassBean {
|
||||
protected int id;
|
||||
protected String name;
|
||||
protected String thumb;
|
||||
protected int orderNo;
|
||||
private boolean isAll;
|
||||
private String des;
|
||||
private boolean checked;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getThumb() {
|
||||
return thumb;
|
||||
}
|
||||
|
||||
public void setThumb(String thumb) {
|
||||
this.thumb = thumb;
|
||||
}
|
||||
|
||||
@JSONField(name = "orderno")
|
||||
public int getOrderNo() {
|
||||
return orderNo;
|
||||
}
|
||||
|
||||
@JSONField(name = "orderno")
|
||||
public void setOrderNo(int orderNo) {
|
||||
this.orderNo = orderNo;
|
||||
}
|
||||
|
||||
public boolean isAll() {
|
||||
return isAll;
|
||||
}
|
||||
|
||||
public void setAll(boolean all) {
|
||||
isAll = all;
|
||||
}
|
||||
|
||||
public String getDes() {
|
||||
return des;
|
||||
}
|
||||
|
||||
public void setDes(String des) {
|
||||
this.des = des;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
return checked;
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
}
|
||||
167
common/src/main/java/com/yunbao/common/bean/LiveGiftBean.java
Normal file
167
common/src/main/java/com/yunbao/common/bean/LiveGiftBean.java
Normal file
@@ -0,0 +1,167 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/10/12.
|
||||
*/
|
||||
|
||||
public class LiveGiftBean {
|
||||
|
||||
// public static final int TYPE_NORMAL = 0;
|
||||
// public static final int TYPE_DELUXE = 1;
|
||||
// public static final int MARK_NORMAL = 0;
|
||||
// public static final int MARK_HOT = 1;
|
||||
// public static final int MARK_GUARD = 2;
|
||||
// public static final int MARK_LUCK = 3;
|
||||
|
||||
private int id;
|
||||
private int type;//0 普通礼物 1是豪华礼物
|
||||
private int mark;// 0 普通 1热门 2守护 3幸运
|
||||
private String name;
|
||||
private String price;
|
||||
private String icon;
|
||||
private boolean checked;
|
||||
private int page;
|
||||
private View mView;
|
||||
private String sendType;//支付是金币还是钻石
|
||||
private String mGiftNum;
|
||||
|
||||
private String num;//心愿单添加礼物和数量
|
||||
private String swf;
|
||||
private String isweek;
|
||||
private String end_time;
|
||||
|
||||
public String getEnd_time() {
|
||||
return end_time;
|
||||
}
|
||||
|
||||
public void setEnd_time(String end_time) {
|
||||
this.end_time = end_time;
|
||||
}
|
||||
|
||||
public String getIsweek() {
|
||||
return isweek;
|
||||
}
|
||||
|
||||
public void setIsweek(String isweek) {
|
||||
this.isweek = isweek;
|
||||
}
|
||||
|
||||
public String getSwf() {
|
||||
return swf;
|
||||
}
|
||||
|
||||
public void setSwf(String swf) {
|
||||
this.swf = swf;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getMark() {
|
||||
return mark;
|
||||
}
|
||||
|
||||
public void setMark(int mark) {
|
||||
this.mark = mark;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftname")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftname")
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@JSONField(name = "needcoin")
|
||||
public String getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
@JSONField(name = "needcoin")
|
||||
public void setPrice(String price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
@JSONField(name = "gifticon")
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
@JSONField(name = "gifticon")
|
||||
public void setIcon(String icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
return checked;
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPage(int page) {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
public View getView() {
|
||||
return mView;
|
||||
}
|
||||
|
||||
public void setView(View view) {
|
||||
mView = view;
|
||||
}
|
||||
|
||||
|
||||
public String getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public void setNum(String num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
@JSONField(name = "sendtype")
|
||||
public String getSendType() {
|
||||
return sendType;
|
||||
}
|
||||
|
||||
@JSONField(name = "sendtype")
|
||||
public void setSendType(String sendType) {
|
||||
this.sendType = sendType;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftnum")
|
||||
public String getGiftNum() {
|
||||
return mGiftNum;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftnum")
|
||||
public void setGiftNum(String giftNum) {
|
||||
this.mGiftNum = giftNum;
|
||||
}
|
||||
}
|
||||
142
common/src/main/java/com/yunbao/common/bean/LiveGiftBean2.java
Normal file
142
common/src/main/java/com/yunbao/common/bean/LiveGiftBean2.java
Normal file
@@ -0,0 +1,142 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/10/12.
|
||||
*/
|
||||
|
||||
public class LiveGiftBean2 {
|
||||
|
||||
public static final int TYPE_NORMAL = 0;
|
||||
public static final int TYPE_DELUXE = 1;
|
||||
public static final int MARK_NORMAL = 0;
|
||||
public static final int MARK_HOT = 1;
|
||||
public static final int MARK_GUARD = 2;
|
||||
public static final int MARK_LUCK = 3;
|
||||
|
||||
private int id;
|
||||
private int type;//0 普通礼物 1是豪华礼物
|
||||
private int mark;// 0 普通 1热门 2守护 3幸运
|
||||
private String name;
|
||||
private String price;
|
||||
private String icon;
|
||||
private boolean checked;
|
||||
private int page;
|
||||
private View mView;
|
||||
private String sendType;
|
||||
private String mGiftNum;
|
||||
|
||||
private String num;//心愿单添加礼物和数量
|
||||
|
||||
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getMark() {
|
||||
return mark;
|
||||
}
|
||||
|
||||
public void setMark(int mark) {
|
||||
this.mark = mark;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftname")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftname")
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@JSONField(name = "needcoin")
|
||||
public String getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
@JSONField(name = "needcoin")
|
||||
public void setPrice(String price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
@JSONField(name = "gifticon")
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
@JSONField(name = "gifticon")
|
||||
public void setIcon(String icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
return checked;
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPage(int page) {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
public View getView() {
|
||||
return mView;
|
||||
}
|
||||
|
||||
public void setView(View view) {
|
||||
mView = view;
|
||||
}
|
||||
|
||||
|
||||
public String getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public void setNum(String num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
@JSONField(name = "sendtype")
|
||||
public String getSendType() {
|
||||
return sendType;
|
||||
}
|
||||
|
||||
@JSONField(name = "sendtype")
|
||||
public void setSendType(String sendType) {
|
||||
this.sendType = sendType;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftnum")
|
||||
public String getGiftNum() {
|
||||
return mGiftNum;
|
||||
}
|
||||
|
||||
@JSONField(name = "giftnum")
|
||||
public void setGiftNum(String giftNum) {
|
||||
this.mGiftNum = giftNum;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
public class LiveSvgGiftBean {
|
||||
|
||||
/**
|
||||
* id : 227
|
||||
* giftname : 愛心飛機
|
||||
* swf : https://qny.shayucm.com/svga/%E6%84%9B%E5%BF%83%E9%A3%9B%E6%A9%9F.svga
|
||||
*/
|
||||
|
||||
private String id;
|
||||
private String giftname;
|
||||
private String swf;
|
||||
private String md5;
|
||||
|
||||
public String getMd5() {
|
||||
return md5;
|
||||
}
|
||||
|
||||
public void setMd5(String md5) {
|
||||
this.md5 = md5;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getGiftname() {
|
||||
return giftname;
|
||||
}
|
||||
|
||||
public void setGiftname(String giftname) {
|
||||
this.giftname = giftname;
|
||||
}
|
||||
|
||||
public String getSwf() {
|
||||
return swf;
|
||||
}
|
||||
|
||||
public void setSwf(String swf) {
|
||||
this.swf = swf;
|
||||
}
|
||||
}
|
||||
57
common/src/main/java/com/yunbao/common/bean/LoginData.java
Normal file
57
common/src/main/java/com/yunbao/common/bean/LoginData.java
Normal file
@@ -0,0 +1,57 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/21.
|
||||
*/
|
||||
|
||||
public class LoginData {
|
||||
|
||||
private String mType;
|
||||
private String mOpenID;
|
||||
private String mNickName;
|
||||
private String mAvatar;
|
||||
|
||||
public LoginData() {
|
||||
|
||||
}
|
||||
|
||||
public LoginData(String type, String openID, String nickName, String avatar) {
|
||||
mType = type;
|
||||
mOpenID = openID;
|
||||
mNickName = nickName;
|
||||
mAvatar = avatar;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return mType;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
mType = type;
|
||||
}
|
||||
|
||||
public String getOpenID() {
|
||||
return mOpenID;
|
||||
}
|
||||
|
||||
public void setOpenID(String openID) {
|
||||
mOpenID = openID;
|
||||
}
|
||||
|
||||
public String getNickName() {
|
||||
return mNickName;
|
||||
}
|
||||
|
||||
public void setNickName(String nickName) {
|
||||
mNickName = nickName;
|
||||
}
|
||||
|
||||
public String getAvatar() {
|
||||
return mAvatar;
|
||||
}
|
||||
|
||||
public void setAvatar(String avatar) {
|
||||
mAvatar = avatar;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/7/18.
|
||||
* 腾讯定位结果的实体类
|
||||
*/
|
||||
|
||||
public class TxLocationBean {
|
||||
private double lng;//经度
|
||||
private double lat;//纬度
|
||||
private String nation;//国家
|
||||
private String province;//省
|
||||
private String city;//市
|
||||
private String district;//区
|
||||
private String street;//街道
|
||||
private String address;//完整地址
|
||||
private List<TxLocationPoiBean> poiList;//周边
|
||||
|
||||
public double getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public void setLng(double lng) {
|
||||
this.lng = lng;
|
||||
}
|
||||
|
||||
public double getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public void setLat(double lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
public String getNation() {
|
||||
return nation;
|
||||
}
|
||||
|
||||
public void setNation(String nation) {
|
||||
this.nation = nation;
|
||||
}
|
||||
|
||||
public String getProvince() {
|
||||
return province;
|
||||
}
|
||||
|
||||
public void setProvince(String province) {
|
||||
this.province = province;
|
||||
}
|
||||
|
||||
public String getCity() {
|
||||
return city;
|
||||
}
|
||||
|
||||
public void setCity(String city) {
|
||||
this.city = city;
|
||||
}
|
||||
|
||||
public String getDistrict() {
|
||||
return district;
|
||||
}
|
||||
|
||||
public void setDistrict(String district) {
|
||||
this.district = district;
|
||||
}
|
||||
|
||||
public String getStreet() {
|
||||
return street;
|
||||
}
|
||||
|
||||
public void setStreet(String street) {
|
||||
this.street = street;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public void setAddress(String address) {
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
public List<TxLocationPoiBean> getPoiList() {
|
||||
return poiList;
|
||||
}
|
||||
|
||||
public void setPoiList(List<TxLocationPoiBean> poiList) {
|
||||
this.poiList = poiList;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/7/18.
|
||||
* 腾讯定位sdk 的poi 实体类
|
||||
*/
|
||||
|
||||
public class TxLocationPoiBean {
|
||||
|
||||
private String id;
|
||||
private String title;
|
||||
private String address;
|
||||
private String category;
|
||||
private Location location;
|
||||
private double _distance;
|
||||
private String _dir_desc;
|
||||
private boolean checked;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public void setAddress(String address) {
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
public String getCategory() {
|
||||
return category;
|
||||
}
|
||||
|
||||
public void setCategory(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public void setLocation(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public double get_distance() {
|
||||
return _distance;
|
||||
}
|
||||
|
||||
public void set_distance(double _distance) {
|
||||
this._distance = _distance;
|
||||
}
|
||||
|
||||
public String get_dir_desc() {
|
||||
return _dir_desc;
|
||||
}
|
||||
|
||||
public void set_dir_desc(String _dir_desc) {
|
||||
this._dir_desc = _dir_desc;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
return checked;
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
|
||||
public class Location {
|
||||
private double lat;
|
||||
private double lng;
|
||||
|
||||
public double getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public void setLat(double lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
public double getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public void setLng(double lng) {
|
||||
this.lng = lng;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/30.
|
||||
*
|
||||
*/
|
||||
|
||||
public class UpdataListBean {
|
||||
private int index;
|
||||
private String name;
|
||||
|
||||
public UpdataListBean(int index, String name) {
|
||||
this.index = index;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getIndex() {
|
||||
return index;
|
||||
}
|
||||
|
||||
public void setIndex(int index) {
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
796
common/src/main/java/com/yunbao/common/bean/UserBean.java
Normal file
796
common/src/main/java/com/yunbao/common/bean/UserBean.java
Normal file
@@ -0,0 +1,796 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/8/14.
|
||||
*/
|
||||
|
||||
public class UserBean implements Parcelable {
|
||||
|
||||
protected String id;
|
||||
protected String userNiceName;
|
||||
protected String avatar;
|
||||
protected String avatarThumb;
|
||||
protected int sex;
|
||||
protected String signature;
|
||||
protected String coin;
|
||||
protected String gold;
|
||||
protected String votes;
|
||||
protected String consumption;
|
||||
protected String votestotal;
|
||||
protected String province;
|
||||
protected String city;
|
||||
protected String location;//所在地
|
||||
protected String birthday;
|
||||
protected int level;
|
||||
protected int levelAnchor;
|
||||
protected int lives;
|
||||
protected int follows;
|
||||
protected int fans;
|
||||
protected Vip vip;
|
||||
protected Liang liang;
|
||||
protected Car car;
|
||||
protected int medal_level;
|
||||
protected String medal_name;
|
||||
protected DressBean Dress;
|
||||
protected String noble_id;
|
||||
protected String yuanbao;
|
||||
private String noble_name;
|
||||
private String islive;
|
||||
private String medal_no_display_src;
|
||||
private String hot_num;
|
||||
private String goodnum;
|
||||
private String fans_pic;
|
||||
private String gifticon;
|
||||
private String department_name;
|
||||
private String token_rong="";
|
||||
private String noble_end_time;
|
||||
private String slide;
|
||||
private String users_type;
|
||||
private String is_bind;
|
||||
private String mobile;
|
||||
private String front_task;
|
||||
private String is_admin;
|
||||
|
||||
public String getIs_admin() {
|
||||
return is_admin;
|
||||
}
|
||||
|
||||
public void setIs_admin(String is_admin) {
|
||||
this.is_admin = is_admin;
|
||||
}
|
||||
|
||||
public String getFront_task() {
|
||||
return front_task;
|
||||
}
|
||||
|
||||
public void setFront_task(String front_task) {
|
||||
this.front_task = front_task;
|
||||
}
|
||||
|
||||
public String getMobile() {
|
||||
return mobile;
|
||||
}
|
||||
|
||||
public void setMobile(String mobile) {
|
||||
this.mobile = mobile;
|
||||
}
|
||||
|
||||
public String getIs_bind() {
|
||||
return is_bind;
|
||||
}
|
||||
|
||||
public void setIs_bind(String is_bind) {
|
||||
this.is_bind = is_bind;
|
||||
}
|
||||
|
||||
public String getUsers_type() {
|
||||
return users_type;
|
||||
}
|
||||
|
||||
public void setUsers_type(String users_type) {
|
||||
this.users_type = users_type;
|
||||
}
|
||||
|
||||
public String getSlide() {
|
||||
return slide;
|
||||
}
|
||||
|
||||
public void setSlide(String slide) {
|
||||
this.slide = slide;
|
||||
}
|
||||
|
||||
public String getNoble_end_time() {
|
||||
return noble_end_time;
|
||||
}
|
||||
|
||||
public void setNoble_end_time(String noble_end_time) {
|
||||
this.noble_end_time = noble_end_time;
|
||||
}
|
||||
|
||||
public String getToken_rong() {
|
||||
return token_rong;
|
||||
}
|
||||
|
||||
public void setToken_rong(String token_rong) {
|
||||
this.token_rong = token_rong;
|
||||
}
|
||||
|
||||
public String getDepartment_name() {
|
||||
return department_name;
|
||||
}
|
||||
|
||||
public void setDepartment_name(String department_name) {
|
||||
this.department_name = department_name;
|
||||
}
|
||||
|
||||
public String getMedal_name() {
|
||||
return medal_name;
|
||||
}
|
||||
|
||||
public void setMedal_name(String medal_name) {
|
||||
this.medal_name = medal_name;
|
||||
}
|
||||
|
||||
public String getGifticon() {
|
||||
return gifticon;
|
||||
}
|
||||
|
||||
public void setGifticon(String gifticon) {
|
||||
this.gifticon = gifticon;
|
||||
}
|
||||
|
||||
public String getFans_pic() {
|
||||
return fans_pic;
|
||||
}
|
||||
|
||||
public void setFans_pic(String fans_pic) {
|
||||
this.fans_pic = fans_pic;
|
||||
}
|
||||
|
||||
public String getGoodnum() {
|
||||
return goodnum;
|
||||
}
|
||||
|
||||
public void setGoodnum(String goodnum) {
|
||||
this.goodnum = goodnum;
|
||||
}
|
||||
|
||||
public String getHot_num() {
|
||||
return hot_num;
|
||||
}
|
||||
|
||||
public void setHot_num(String hot_num) {
|
||||
this.hot_num = hot_num;
|
||||
}
|
||||
|
||||
public String getMedal_no_display_src() {
|
||||
return medal_no_display_src;
|
||||
}
|
||||
|
||||
public void setMedal_no_display_src(String medal_no_display_src) {
|
||||
this.medal_no_display_src = medal_no_display_src;
|
||||
}
|
||||
|
||||
public String getIslive() {
|
||||
return islive;
|
||||
}
|
||||
|
||||
public void setIslive(String islive) {
|
||||
this.islive = islive;
|
||||
}
|
||||
|
||||
public String getNoble_name() {
|
||||
return noble_name;
|
||||
}
|
||||
|
||||
public void setNoble_name(String noble_name) {
|
||||
this.noble_name = noble_name;
|
||||
}
|
||||
|
||||
public String getYuanbao() {
|
||||
return yuanbao;
|
||||
}
|
||||
|
||||
public void setYuanbao(String yuanbao) {
|
||||
this.yuanbao = yuanbao;
|
||||
}
|
||||
|
||||
public String getNoble_id() {
|
||||
return noble_id;
|
||||
}
|
||||
|
||||
public void setNoble_id(String noble_id) {
|
||||
this.noble_id = noble_id;
|
||||
}
|
||||
|
||||
public DressBean getDress() {
|
||||
return Dress;
|
||||
}
|
||||
|
||||
public void setDress(DressBean dress) {
|
||||
Dress = dress;
|
||||
}
|
||||
|
||||
@JSONField(name = "gold")
|
||||
public String getGold() {
|
||||
return gold;
|
||||
}
|
||||
|
||||
|
||||
@JSONField(name = "gold")
|
||||
public void setGold(String gold) {
|
||||
this.gold = gold;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@JSONField(name = "user_nicename")
|
||||
public String getUserNiceName() {
|
||||
return userNiceName;
|
||||
}
|
||||
|
||||
@JSONField(name = "user_nicename")
|
||||
public void setUserNiceName(String userNiceName) {
|
||||
this.userNiceName = userNiceName;
|
||||
}
|
||||
|
||||
public String getAvatar() {
|
||||
return avatar;
|
||||
}
|
||||
|
||||
public void setAvatar(String avatar) {
|
||||
this.avatar = avatar;
|
||||
}
|
||||
|
||||
@JSONField(name = "avatar_thumb")
|
||||
public String getAvatarThumb() {
|
||||
return avatarThumb;
|
||||
}
|
||||
|
||||
@JSONField(name = "avatar_thumb")
|
||||
public void setAvatarThumb(String avatarThumb) {
|
||||
this.avatarThumb = avatarThumb;
|
||||
}
|
||||
|
||||
public int getSex() {
|
||||
return sex;
|
||||
}
|
||||
|
||||
public void setSex(int sex) {
|
||||
this.sex = sex;
|
||||
}
|
||||
|
||||
public String getSignature() {
|
||||
return signature;
|
||||
}
|
||||
|
||||
public void setSignature(String signature) {
|
||||
this.signature = signature;
|
||||
}
|
||||
|
||||
public String getCoin() {
|
||||
return coin;
|
||||
}
|
||||
|
||||
public void setCoin(String coin) {
|
||||
this.coin = coin;
|
||||
}
|
||||
|
||||
public String getVotes() {
|
||||
return votes;
|
||||
}
|
||||
|
||||
public void setVotes(String votes) {
|
||||
this.votes = votes;
|
||||
}
|
||||
|
||||
public String getConsumption() {
|
||||
return consumption;
|
||||
}
|
||||
|
||||
public void setConsumption(String consumption) {
|
||||
this.consumption = consumption;
|
||||
}
|
||||
|
||||
public String getVotestotal() {
|
||||
return votestotal;
|
||||
}
|
||||
|
||||
public void setVotestotal(String votestotal) {
|
||||
this.votestotal = votestotal;
|
||||
}
|
||||
|
||||
public String getProvince() {
|
||||
return province;
|
||||
}
|
||||
|
||||
public void setProvince(String province) {
|
||||
this.province = province;
|
||||
}
|
||||
|
||||
public String getCity() {
|
||||
return city;
|
||||
}
|
||||
|
||||
public void setCity(String city) {
|
||||
this.city = city;
|
||||
}
|
||||
|
||||
|
||||
public String getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public void setLocation(String location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public String getBirthday() {
|
||||
return birthday;
|
||||
}
|
||||
|
||||
public void setBirthday(String birthday) {
|
||||
this.birthday = birthday;
|
||||
}
|
||||
|
||||
public int getLevel() {
|
||||
if (level == 0) {
|
||||
level = 1;
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel(int level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
@JSONField(name = "medal_level'")
|
||||
public int getMedalLevel() {
|
||||
return medal_level;
|
||||
}
|
||||
|
||||
@JSONField(name = "medal_level'")
|
||||
public void setMedalLevel(int level) {
|
||||
this.medal_level = level;
|
||||
}
|
||||
|
||||
@JSONField(name = "medal_name'")
|
||||
public String getMedalName() {
|
||||
return medal_name;
|
||||
}
|
||||
|
||||
@JSONField(name = "medal_name'")
|
||||
public void setMedalName(String name) {
|
||||
this.medal_name = name;
|
||||
}
|
||||
|
||||
|
||||
@JSONField(name = "level_anchor")
|
||||
public int getLevelAnchor() {
|
||||
return levelAnchor;
|
||||
}
|
||||
|
||||
@JSONField(name = "level_anchor")
|
||||
public void setLevelAnchor(int levelAnchor) {
|
||||
this.levelAnchor = levelAnchor;
|
||||
}
|
||||
|
||||
|
||||
public int getLives() {
|
||||
return lives;
|
||||
}
|
||||
|
||||
public void setLives(int lives) {
|
||||
this.lives = lives;
|
||||
}
|
||||
|
||||
public int getFollows() {
|
||||
return follows;
|
||||
}
|
||||
|
||||
public void setFollows(int follows) {
|
||||
this.follows = follows;
|
||||
}
|
||||
|
||||
public int getFans() {
|
||||
return fans;
|
||||
}
|
||||
|
||||
public void setFans(int fans) {
|
||||
this.fans = fans;
|
||||
}
|
||||
|
||||
public Vip getVip() {
|
||||
return vip;
|
||||
}
|
||||
|
||||
public void setVip(Vip vip) {
|
||||
this.vip = vip;
|
||||
}
|
||||
|
||||
public Liang getLiang() {
|
||||
return liang;
|
||||
}
|
||||
|
||||
public void setLiang(Liang liang) {
|
||||
this.liang = liang;
|
||||
}
|
||||
|
||||
public Car getCar() {
|
||||
return car;
|
||||
}
|
||||
|
||||
public void setCar(Car car) {
|
||||
this.car = car;
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示靓号
|
||||
*/
|
||||
public String getLiangNameTip() {
|
||||
if (this.liang != null) {
|
||||
String liangName = this.liang.getName();
|
||||
if (!TextUtils.isEmpty(liangName) && !"0".equals(liangName)) {
|
||||
// return WordUtil.getString(R.string.live_liang) + ":" + liangName;
|
||||
return liangName;
|
||||
}
|
||||
}
|
||||
return "ID:" + this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取靓号
|
||||
*/
|
||||
public String getGoodName() {
|
||||
if (this.liang != null) {
|
||||
return this.liang.getName();
|
||||
}
|
||||
return "0";
|
||||
}
|
||||
|
||||
public int getVipType() {
|
||||
if (this.vip != null) {
|
||||
return this.vip.getType();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public UserBean() {
|
||||
}
|
||||
|
||||
protected UserBean(Parcel in) {
|
||||
this.id = in.readString();
|
||||
this.userNiceName = in.readString();
|
||||
this.avatar = in.readString();
|
||||
this.avatarThumb = in.readString();
|
||||
this.sex = in.readInt();
|
||||
this.signature = in.readString();
|
||||
this.coin = in.readString();
|
||||
this.votes = in.readString();
|
||||
this.consumption = in.readString();
|
||||
this.votestotal = in.readString();
|
||||
this.province = in.readString();
|
||||
this.city = in.readString();
|
||||
this.location = in.readString();
|
||||
this.birthday = in.readString();
|
||||
this.level = in.readInt();
|
||||
this.levelAnchor = in.readInt();
|
||||
this.lives = in.readInt();
|
||||
this.follows = in.readInt();
|
||||
this.fans = in.readInt();
|
||||
this.vip = in.readParcelable(Vip.class.getClassLoader());
|
||||
this.liang = in.readParcelable(Liang.class.getClassLoader());
|
||||
this.car = in.readParcelable(Car.class.getClassLoader());
|
||||
this.medal_name = in.readString();
|
||||
this.medal_level = in.readInt();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(this.id);
|
||||
dest.writeString(this.userNiceName);
|
||||
dest.writeString(this.avatar);
|
||||
dest.writeString(this.avatarThumb);
|
||||
dest.writeInt(this.sex);
|
||||
dest.writeString(this.signature);
|
||||
dest.writeString(this.coin);
|
||||
dest.writeString(this.votes);
|
||||
dest.writeString(this.consumption);
|
||||
dest.writeString(this.votestotal);
|
||||
dest.writeString(this.province);
|
||||
dest.writeString(this.city);
|
||||
dest.writeString(this.location);
|
||||
dest.writeString(this.birthday);
|
||||
dest.writeInt(this.level);
|
||||
dest.writeInt(this.levelAnchor);
|
||||
dest.writeInt(this.lives);
|
||||
dest.writeInt(this.follows);
|
||||
dest.writeInt(this.fans);
|
||||
dest.writeParcelable(this.vip, flags);
|
||||
dest.writeParcelable(this.liang, flags);
|
||||
dest.writeParcelable(this.car, flags);
|
||||
dest.writeString(this.medal_name);
|
||||
dest.writeInt(this.medal_level);
|
||||
}
|
||||
|
||||
public static final Creator<UserBean> CREATOR = new Creator<UserBean>() {
|
||||
@Override
|
||||
public UserBean[] newArray(int size) {
|
||||
return new UserBean[size];
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserBean createFromParcel(Parcel in) {
|
||||
return new UserBean(in);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public static class Vip implements Parcelable {
|
||||
protected int type;
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public Vip() {
|
||||
|
||||
}
|
||||
|
||||
public Vip(Parcel in) {
|
||||
this.type = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(this.type);
|
||||
}
|
||||
|
||||
public static final Creator<Vip> CREATOR = new Creator<Vip>() {
|
||||
@Override
|
||||
public Vip[] newArray(int size) {
|
||||
return new Vip[size];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vip createFromParcel(Parcel in) {
|
||||
return new Vip(in);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static class Liang implements Parcelable {
|
||||
protected String name;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Liang() {
|
||||
|
||||
}
|
||||
|
||||
public Liang(Parcel in) {
|
||||
this.name = in.readString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(this.name);
|
||||
}
|
||||
|
||||
public static final Creator<Liang> CREATOR = new Creator<Liang>() {
|
||||
|
||||
@Override
|
||||
public Liang createFromParcel(Parcel in) {
|
||||
return new Liang(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Liang[] newArray(int size) {
|
||||
return new Liang[size];
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public static class Car implements Parcelable {
|
||||
protected int id;
|
||||
protected String swf;
|
||||
protected float swftime;
|
||||
protected String words;
|
||||
protected String car_swf_type;//0=全屏坐骑 1=横幅坐骑
|
||||
protected String user_nicename;
|
||||
protected String car_banner_img;
|
||||
protected String car_colour;
|
||||
|
||||
protected Car(Parcel in) {
|
||||
id = in.readInt();
|
||||
swf = in.readString();
|
||||
swftime = in.readFloat();
|
||||
words = in.readString();
|
||||
car_swf_type = in.readString();
|
||||
user_nicename = in.readString();
|
||||
car_banner_img = in.readString();
|
||||
car_colour = in.readString();
|
||||
}
|
||||
|
||||
public static final Creator<Car> CREATOR = new Creator<Car>() {
|
||||
@Override
|
||||
public Car createFromParcel(Parcel in) {
|
||||
return new Car(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Car[] newArray(int size) {
|
||||
return new Car[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getSwf() {
|
||||
return swf;
|
||||
}
|
||||
|
||||
public void setSwf(String swf) {
|
||||
this.swf = swf;
|
||||
}
|
||||
|
||||
public float getSwftime() {
|
||||
return swftime;
|
||||
}
|
||||
|
||||
public void setSwftime(float swftime) {
|
||||
this.swftime = swftime;
|
||||
}
|
||||
|
||||
public String getWords() {
|
||||
return words;
|
||||
}
|
||||
|
||||
public void setWords(String words) {
|
||||
this.words = words;
|
||||
}
|
||||
|
||||
public String getCar_swf_type() {
|
||||
return car_swf_type;
|
||||
}
|
||||
|
||||
public void setCar_swf_type(String car_swf_type) {
|
||||
this.car_swf_type = car_swf_type;
|
||||
}
|
||||
|
||||
public String getUser_nicename() {
|
||||
return user_nicename;
|
||||
}
|
||||
|
||||
public void setUser_nicename(String user_nicename) {
|
||||
this.user_nicename = user_nicename;
|
||||
}
|
||||
|
||||
public String getCar_banner_img() {
|
||||
return car_banner_img;
|
||||
}
|
||||
|
||||
public void setCar_banner_img(String car_banner_img) {
|
||||
this.car_banner_img = car_banner_img;
|
||||
}
|
||||
|
||||
public String getCar_colour() {
|
||||
return car_colour;
|
||||
}
|
||||
|
||||
public void setCar_colour(String car_colour) {
|
||||
this.car_colour = car_colour;
|
||||
}
|
||||
|
||||
public Car() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(id);
|
||||
dest.writeString(swf);
|
||||
dest.writeFloat(swftime);
|
||||
dest.writeString(words);
|
||||
dest.writeString(car_swf_type);
|
||||
dest.writeString(user_nicename);
|
||||
dest.writeString(car_banner_img);
|
||||
dest.writeString(car_colour);
|
||||
}
|
||||
}
|
||||
|
||||
public static class DressBean {
|
||||
|
||||
private String avatar_frame;
|
||||
private String medal;
|
||||
private String bubble;
|
||||
private String medal_new;
|
||||
|
||||
public String getMedal_new() {
|
||||
return medal_new;
|
||||
}
|
||||
|
||||
public void setMedal_new(String medal_new) {
|
||||
this.medal_new = medal_new;
|
||||
}
|
||||
|
||||
public String getAvatar_frame() {
|
||||
return avatar_frame;
|
||||
}
|
||||
|
||||
public void setAvatar_frame(String avatar_frame) {
|
||||
this.avatar_frame = avatar_frame;
|
||||
}
|
||||
|
||||
public String getMedal() {
|
||||
return medal;
|
||||
}
|
||||
|
||||
public void setMedal(String medal) {
|
||||
this.medal = medal;
|
||||
}
|
||||
|
||||
public String getBubble() {
|
||||
return bubble;
|
||||
}
|
||||
|
||||
public void setBubble(String bubble) {
|
||||
this.bubble = bubble;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/28.
|
||||
* 我的 页面的item
|
||||
*/
|
||||
|
||||
public class UserItemBean {
|
||||
|
||||
private int id;
|
||||
private String name;
|
||||
private String thumb;
|
||||
private String href;
|
||||
private boolean mGroupLast;
|
||||
private boolean mAllLast;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getThumb() {
|
||||
return thumb;
|
||||
}
|
||||
|
||||
public void setThumb(String thumb) {
|
||||
this.thumb = thumb;
|
||||
}
|
||||
|
||||
public String getHref() {
|
||||
return href;
|
||||
}
|
||||
|
||||
public void setHref(String href) {
|
||||
this.href = href;
|
||||
}
|
||||
|
||||
public boolean isGroupLast() {
|
||||
return mGroupLast;
|
||||
}
|
||||
|
||||
public void setGroupLast(boolean groupLast) {
|
||||
mGroupLast = groupLast;
|
||||
}
|
||||
|
||||
public boolean isAllLast() {
|
||||
return mAllLast;
|
||||
}
|
||||
|
||||
public void setAllLast(boolean allLast) {
|
||||
mAllLast = allLast;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
UserItemBean bean = (UserItemBean) o;
|
||||
|
||||
if (id != bean.id) return false;
|
||||
if (name != null ? !name.equals(bean.name) : bean.name != null) return false;
|
||||
if (thumb != null ? !thumb.equals(bean.thumb) : bean.thumb != null) return false;
|
||||
return href != null ? href.equals(bean.href) : bean.href == null;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = id;
|
||||
result = 31 * result + (name != null ? name.hashCode() : 0);
|
||||
result = 31 * result + (thumb != null ? thumb.hashCode() : 0);
|
||||
result = 31 * result + (href != null ? href.hashCode() : 0);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
189
common/src/main/java/com/yunbao/common/bean/VideoListBean.java
Normal file
189
common/src/main/java/com/yunbao/common/bean/VideoListBean.java
Normal file
@@ -0,0 +1,189 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
/**
|
||||
* Created by Chen Haoxuan on 2022/4/11.
|
||||
*/
|
||||
|
||||
public class VideoListBean {
|
||||
|
||||
private String id;
|
||||
private String img_or_video;
|
||||
private String img_json;
|
||||
private String video;
|
||||
private String content;//内容
|
||||
private String talk_id;
|
||||
private String is_top;
|
||||
private String love_num;
|
||||
private String comment_num;
|
||||
private String share_num;
|
||||
private String gift_num;
|
||||
private String hot_num;
|
||||
private String create_time;
|
||||
private String ai_content;
|
||||
private String user_name;//名字
|
||||
private String user_avatar;//头像
|
||||
private String is_attention;//-1=自己 1=关注了 2=没关注 0=没关注
|
||||
private String user_id;
|
||||
private String talk_name;
|
||||
private String is_love;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getImg_or_video() {
|
||||
return img_or_video;
|
||||
}
|
||||
|
||||
public void setImg_or_video(String img_or_video) {
|
||||
this.img_or_video = img_or_video;
|
||||
}
|
||||
|
||||
public String getImg_json() {
|
||||
return img_json;
|
||||
}
|
||||
|
||||
public void setImg_json(String img_json) {
|
||||
this.img_json = img_json;
|
||||
}
|
||||
|
||||
public String getVideo() {
|
||||
return video;
|
||||
}
|
||||
|
||||
public void setVideo(String video) {
|
||||
this.video = video;
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public String getTalk_id() {
|
||||
return talk_id;
|
||||
}
|
||||
|
||||
public void setTalk_id(String talk_id) {
|
||||
this.talk_id = talk_id;
|
||||
}
|
||||
|
||||
public String getIs_top() {
|
||||
return is_top;
|
||||
}
|
||||
|
||||
public void setIs_top(String is_top) {
|
||||
this.is_top = is_top;
|
||||
}
|
||||
|
||||
public String getLove_num() {
|
||||
return love_num;
|
||||
}
|
||||
|
||||
public void setLove_num(String love_num) {
|
||||
this.love_num = love_num;
|
||||
}
|
||||
|
||||
public String getComment_num() {
|
||||
return comment_num;
|
||||
}
|
||||
|
||||
public void setComment_num(String comment_num) {
|
||||
this.comment_num = comment_num;
|
||||
}
|
||||
|
||||
public String getShare_num() {
|
||||
return share_num;
|
||||
}
|
||||
|
||||
public void setShare_num(String share_num) {
|
||||
this.share_num = share_num;
|
||||
}
|
||||
|
||||
public String getGift_num() {
|
||||
return gift_num;
|
||||
}
|
||||
|
||||
public void setGift_num(String gift_num) {
|
||||
this.gift_num = gift_num;
|
||||
}
|
||||
|
||||
public String getHot_num() {
|
||||
return hot_num;
|
||||
}
|
||||
|
||||
public void setHot_num(String hot_num) {
|
||||
this.hot_num = hot_num;
|
||||
}
|
||||
|
||||
public String getCreate_time() {
|
||||
return create_time;
|
||||
}
|
||||
|
||||
public void setCreate_time(String create_time) {
|
||||
this.create_time = create_time;
|
||||
}
|
||||
|
||||
public String getAi_content() {
|
||||
return ai_content;
|
||||
}
|
||||
|
||||
public void setAi_content(String ai_content) {
|
||||
this.ai_content = ai_content;
|
||||
}
|
||||
|
||||
public String getUser_name() {
|
||||
return user_name;
|
||||
}
|
||||
|
||||
public void setUser_name(String user_name) {
|
||||
this.user_name = user_name;
|
||||
}
|
||||
|
||||
public String getUser_avatar() {
|
||||
return user_avatar;
|
||||
}
|
||||
|
||||
public void setUser_avatar(String user_avatar) {
|
||||
this.user_avatar = user_avatar;
|
||||
}
|
||||
|
||||
public String getIs_attention() {
|
||||
return is_attention;
|
||||
}
|
||||
|
||||
public void setIs_attention(String is_attention) {
|
||||
this.is_attention = is_attention;
|
||||
}
|
||||
|
||||
public String getUser_id() {
|
||||
return user_id;
|
||||
}
|
||||
|
||||
public void setUser_id(String user_id) {
|
||||
this.user_id = user_id;
|
||||
}
|
||||
|
||||
public String getTalk_name() {
|
||||
return talk_name;
|
||||
}
|
||||
|
||||
public void setTalk_name(String talk_name) {
|
||||
this.talk_name = talk_name;
|
||||
}
|
||||
|
||||
public String getIs_love() {
|
||||
return is_love;
|
||||
}
|
||||
|
||||
public void setIs_love(String is_love) {
|
||||
this.is_love = is_love;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
/**
|
||||
* Created by Chen Haoxuan on 2022/6/21.
|
||||
* 签到奖励实体类
|
||||
*/
|
||||
|
||||
public class WeekListBean {
|
||||
private String anchor_id;
|
||||
private String anchor_name;
|
||||
private String anchor_avatar;
|
||||
private String seconds;
|
||||
|
||||
public String getAnchor_id() {
|
||||
return anchor_id;
|
||||
}
|
||||
|
||||
public void setAnchor_id(String anchor_id) {
|
||||
this.anchor_id = anchor_id;
|
||||
}
|
||||
|
||||
public String getAnchor_name() {
|
||||
return anchor_name;
|
||||
}
|
||||
|
||||
public void setAnchor_name(String anchor_name) {
|
||||
this.anchor_name = anchor_name;
|
||||
}
|
||||
|
||||
public String getAnchor_avatar() {
|
||||
return anchor_avatar;
|
||||
}
|
||||
|
||||
public void setAnchor_avatar(String anchor_avatar) {
|
||||
this.anchor_avatar = anchor_avatar;
|
||||
}
|
||||
|
||||
public String getSeconds() {
|
||||
return seconds;
|
||||
}
|
||||
|
||||
public void setSeconds(String seconds) {
|
||||
this.seconds = seconds;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.RectF;
|
||||
import androidx.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2019/4/27.
|
||||
*/
|
||||
|
||||
public class CircleProgress extends View {
|
||||
|
||||
private float mStrokeWidth;
|
||||
private float mR;
|
||||
private int mBgColor;
|
||||
private int mFgColor;
|
||||
private float mMaxProgress;
|
||||
private float mCurProgress;
|
||||
private Paint mBgPaint;
|
||||
private Paint mFgPaint;
|
||||
private float mX;
|
||||
private RectF mRectF;
|
||||
|
||||
public CircleProgress(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public CircleProgress(Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public CircleProgress(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CircleProgress);
|
||||
mBgColor = ta.getColor(R.styleable.CircleProgress_cp_bg_color, 0);
|
||||
mFgColor = ta.getColor(R.styleable.CircleProgress_cp_fg_color, 0);
|
||||
mStrokeWidth = ta.getDimension(R.styleable.CircleProgress_cp_stroke_width, 0);
|
||||
mMaxProgress = ta.getFloat(R.styleable.CircleProgress_cp_max_progress, 0);
|
||||
mCurProgress = ta.getFloat(R.styleable.CircleProgress_cp_cur_progress, 0);
|
||||
ta.recycle();
|
||||
initPaint();
|
||||
}
|
||||
|
||||
private void initPaint() {
|
||||
mBgPaint = new Paint();
|
||||
mBgPaint.setAntiAlias(true);
|
||||
mBgPaint.setDither(true);
|
||||
mBgPaint.setColor(mBgColor);
|
||||
mBgPaint.setStyle(Paint.Style.STROKE);
|
||||
mBgPaint.setStrokeWidth(mStrokeWidth);
|
||||
|
||||
mFgPaint = new Paint();
|
||||
mFgPaint.setAntiAlias(true);
|
||||
mFgPaint.setDither(true);
|
||||
mFgPaint.setColor(mFgColor);
|
||||
mFgPaint.setStyle(Paint.Style.STROKE);
|
||||
mFgPaint.setStrokeWidth(mStrokeWidth);
|
||||
mRectF = new RectF();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
|
||||
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||
float offset = mStrokeWidth / 2;
|
||||
mX = w / 2;
|
||||
mR = mX - offset;
|
||||
mRectF = new RectF();
|
||||
mRectF.left = offset;
|
||||
mRectF.top = offset;
|
||||
mRectF.right = w - offset;
|
||||
mRectF.bottom = mRectF.right;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
canvas.drawCircle(mX, mX, mR, mBgPaint);
|
||||
if (mMaxProgress > 0 && mCurProgress > 0) {
|
||||
canvas.drawArc(mRectF, -90, mCurProgress / mMaxProgress * 360, false, mFgPaint);
|
||||
}
|
||||
}
|
||||
|
||||
public void setMaxProgress(float maxProgress) {
|
||||
mMaxProgress = maxProgress;
|
||||
}
|
||||
|
||||
public void setCurProgress(float curProgress) {
|
||||
mCurProgress = curProgress;
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.RectF;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/7/11.
|
||||
*/
|
||||
|
||||
public class CoinGiveLayout extends FrameLayout {
|
||||
|
||||
private static final String TAG = "CoinGiveLayout";
|
||||
private Paint mPaint;
|
||||
private int mBgColor;
|
||||
private float mRadius;
|
||||
private float mRadiusD;
|
||||
private float mArrowWidth;
|
||||
private float mArrowHeight;
|
||||
private float mArrowOffsetX;
|
||||
private int mWidth;
|
||||
private int mHeight;
|
||||
private RectF mRectF;
|
||||
|
||||
|
||||
public CoinGiveLayout(Context context) {
|
||||
super(context, null);
|
||||
}
|
||||
|
||||
public CoinGiveLayout(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public CoinGiveLayout(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CoinGiveLayout);
|
||||
mBgColor = ta.getColor(R.styleable.CoinGiveLayout_cgl_bg_color, 0);
|
||||
mRadius = ta.getDimension(R.styleable.CoinGiveLayout_cgl_radius, 0);
|
||||
mArrowWidth = ta.getDimension(R.styleable.CoinGiveLayout_cgl_arrow_width, 0);
|
||||
mArrowHeight = ta.getDimension(R.styleable.CoinGiveLayout_cgl_arrow_height, 0);
|
||||
mArrowOffsetX = ta.getDimension(R.styleable.CoinGiveLayout_cgl_arrow_offset_x, 0);
|
||||
ta.recycle();
|
||||
initPaint();
|
||||
mRadiusD = mRadius * 2;
|
||||
mRectF = new RectF();
|
||||
}
|
||||
|
||||
private void initPaint() {
|
||||
mPaint = new Paint();
|
||||
mPaint.setAntiAlias(true);
|
||||
mPaint.setDither(true);
|
||||
mPaint.setColor(mBgColor);
|
||||
mPaint.setStyle(Paint.Style.FILL);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||
super.onSizeChanged(w, h, oldw, oldh);
|
||||
mWidth = w;
|
||||
mHeight = h;
|
||||
mRectF.left = 0;
|
||||
mRectF.top = 0;
|
||||
mRectF.right = w;
|
||||
float bottom = h - mArrowHeight;
|
||||
mRectF.bottom = bottom > 0 ? bottom : 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void dispatchDraw(Canvas canvas) {
|
||||
canvas.drawRoundRect(mRectF, mRadius, mRadiusD, mPaint);
|
||||
if (mArrowHeight > 0 && mArrowWidth > 0) {
|
||||
Path path = new Path();
|
||||
path.moveTo(mWidth - mArrowWidth - mArrowOffsetX, mHeight - mArrowHeight);
|
||||
path.rLineTo(0, mArrowHeight);
|
||||
path.rLineTo(mArrowWidth, -mArrowHeight);
|
||||
path.close();
|
||||
canvas.drawPath(path, mPaint);
|
||||
}
|
||||
super.dispatchDraw(canvas);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,438 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
|
||||
import com.scwang.smartrefresh.layout.api.RefreshLayout;
|
||||
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
|
||||
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
|
||||
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
|
||||
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
|
||||
import com.yunbao.common.R;
|
||||
import com.yunbao.common.adapter.RefreshAdapter;
|
||||
import com.yunbao.common.http.HttpCallback;
|
||||
import com.yunbao.common.utils.ToastUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/6/7.
|
||||
*/
|
||||
|
||||
public class CommonRefreshView extends FrameLayout implements View.OnClickListener {
|
||||
|
||||
private Context mContext;
|
||||
private DataHelper mDataHelper;
|
||||
private int mLayoutRes;
|
||||
private View mContentView;
|
||||
private SmartRefreshLayout mSmartRefreshLayout;
|
||||
private ClassicsHeader mHeader;
|
||||
private ClassicsFooter mFooter;
|
||||
public RecyclerView mRecyclerView;
|
||||
private FrameLayout mEmptyLayout;//没有数据的View
|
||||
private View mLoadFailureView;//加载失败View
|
||||
private boolean mRefreshEnable;//下拉刷新是否可用
|
||||
private boolean mLoadMoreEnable;//上拉加载是否可用
|
||||
private int mPageCount;//页数
|
||||
private int mItemCount;//每页的Item个数
|
||||
|
||||
public CommonRefreshView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public CommonRefreshView(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public CommonRefreshView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
mContext = context;
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CommonRefreshView);
|
||||
mRefreshEnable = ta.getBoolean(R.styleable.CommonRefreshView_crv_refreshEnable, true);
|
||||
mLoadMoreEnable = ta.getBoolean(R.styleable.CommonRefreshView_crv_loadMoreEnable, true);
|
||||
mLayoutRes = ta.getResourceId(R.styleable.CommonRefreshView_crv_layout, R.layout.view_refresh_default);
|
||||
mItemCount = ta.getInteger(R.styleable.CommonRefreshView_crv_itemCount, 20);
|
||||
ta.recycle();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
LayoutInflater inflater = LayoutInflater.from(mContext);
|
||||
View view = inflater.inflate(mLayoutRes, this, false);
|
||||
mContentView = view;
|
||||
addView(view);
|
||||
mSmartRefreshLayout = (SmartRefreshLayout) view.findViewById(R.id.refreshLayout);
|
||||
mSmartRefreshLayout.setEnableLoadMoreWhenContentNotFull(false);//是否在列表不满一页时候开启上拉加载功能
|
||||
mSmartRefreshLayout.setEnableFooterFollowWhenLoadFinished(true);//是否在全部加载结束之后Footer跟随内容
|
||||
mSmartRefreshLayout.setEnableOverScrollBounce(false);//设置是否开启越界回弹功能(默认true)
|
||||
mEmptyLayout = (FrameLayout) view.findViewById(R.id.no_data_container);
|
||||
mLoadFailureView = view.findViewById(R.id.load_failure);
|
||||
mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
|
||||
mRecyclerView.setHasFixedSize(true);
|
||||
((SimpleItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
|
||||
mSmartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
|
||||
@Override
|
||||
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
|
||||
refresh();
|
||||
}
|
||||
});
|
||||
|
||||
mSmartRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
|
||||
@Override
|
||||
public void onLoadMore(@NonNull RefreshLayout refreshlayout) {
|
||||
Log.i("t2", "来了哦");
|
||||
loadMore();
|
||||
}
|
||||
});
|
||||
mSmartRefreshLayout.setEnableRefresh(mRefreshEnable);
|
||||
mSmartRefreshLayout.setEnableLoadMore(mLoadMoreEnable);
|
||||
View btnReload = view.findViewById(R.id.btn_reload);
|
||||
if (btnReload != null) {
|
||||
btnReload.setOnClickListener(this);
|
||||
}
|
||||
int textColor = ContextCompat.getColor(mContext, R.color.textColor);
|
||||
mHeader = findViewById(R.id.header);
|
||||
mHeader.setAccentColor(textColor);
|
||||
mFooter = findViewById(R.id.footer);
|
||||
mFooter.setAccentColor(textColor);
|
||||
mFooter.setTextSizeTitle(14);
|
||||
}
|
||||
|
||||
private HttpCallback mRefreshCallback = new HttpCallback() {
|
||||
|
||||
private int mDataCount;
|
||||
|
||||
@Override
|
||||
public void onSuccess(int code, String msg, String[] info) {
|
||||
if (mDataHelper == null) {
|
||||
return;
|
||||
}
|
||||
if (mLoadFailureView != null && mLoadFailureView.getVisibility() == View.VISIBLE) {
|
||||
mLoadFailureView.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
RefreshAdapter adapter = null;
|
||||
RecyclerView.Adapter recyclerViewAdapter = mRecyclerView.getAdapter();
|
||||
if (recyclerViewAdapter != null && recyclerViewAdapter instanceof RefreshAdapter) {
|
||||
adapter = (RefreshAdapter) recyclerViewAdapter;
|
||||
} else {
|
||||
adapter = mDataHelper.getAdapter();
|
||||
if (adapter == null) {
|
||||
return;
|
||||
}
|
||||
mRecyclerView.setAdapter(adapter);
|
||||
}
|
||||
if (code != 0) {
|
||||
ToastUtil.show(msg);
|
||||
return;
|
||||
}
|
||||
if (info != null) {
|
||||
List list = mDataHelper.processData(info);
|
||||
if (list == null) {
|
||||
return;
|
||||
}
|
||||
mDataCount = list.size();
|
||||
if (mDataCount > 0) {
|
||||
if (mEmptyLayout != null && mEmptyLayout.getVisibility() == View.VISIBLE) {
|
||||
mEmptyLayout.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
adapter.refreshData(list);
|
||||
} else {
|
||||
adapter.clearData();
|
||||
if (mEmptyLayout != null && mEmptyLayout.getVisibility() != View.VISIBLE) {
|
||||
mEmptyLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (adapter != null) {
|
||||
adapter.clearData();
|
||||
}
|
||||
if (mEmptyLayout != null && mEmptyLayout.getVisibility() != View.VISIBLE) {
|
||||
mEmptyLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
mDataHelper.onRefreshSuccess(adapter.getList(), adapter.getItemCount());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
if (mEmptyLayout != null && mEmptyLayout.getVisibility() == View.VISIBLE) {
|
||||
mEmptyLayout.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
if (mLoadFailureView != null) {
|
||||
if (mLoadFailureView.getVisibility() != View.VISIBLE) {
|
||||
if (mRecyclerView != null) {
|
||||
RecyclerView.Adapter adapter = mRecyclerView.getAdapter();
|
||||
if (adapter != null && adapter.getItemCount() > 0) {
|
||||
ToastUtil.show(R.string.load_failure);
|
||||
} else {
|
||||
mLoadFailureView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else {
|
||||
mLoadFailureView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else {
|
||||
ToastUtil.show(R.string.load_failure);
|
||||
}
|
||||
}
|
||||
if (mDataHelper != null) {
|
||||
mDataHelper.onRefreshFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
if (mSmartRefreshLayout != null) {
|
||||
mSmartRefreshLayout.finishRefresh(true);
|
||||
if (mDataCount < mItemCount) {
|
||||
mSmartRefreshLayout.finishLoadMore(true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private HttpCallback mLoadMoreCallback = new HttpCallback() {
|
||||
|
||||
private int mDataCount;
|
||||
|
||||
@Override
|
||||
public void onSuccess(int code, String msg, String[] info) {
|
||||
if (mDataHelper == null) {
|
||||
mPageCount--;
|
||||
return;
|
||||
}
|
||||
if (code != 0) {
|
||||
ToastUtil.show(msg);
|
||||
mPageCount--;
|
||||
return;
|
||||
}
|
||||
if (mLoadFailureView != null && mLoadFailureView.getVisibility() == View.VISIBLE) {
|
||||
mLoadFailureView.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
if (info != null) {
|
||||
List list = mDataHelper.processData(info);
|
||||
if (list == null) {
|
||||
mPageCount--;
|
||||
return;
|
||||
}
|
||||
mDataCount = list.size();
|
||||
RefreshAdapter adapter = mDataHelper.getAdapter();
|
||||
if (mDataCount > 0) {
|
||||
if (adapter != null) {
|
||||
adapter.insertList(list);
|
||||
}
|
||||
} else {
|
||||
mPageCount--;
|
||||
}
|
||||
mDataHelper.onLoadMoreSuccess(list, mDataCount);
|
||||
} else {
|
||||
mPageCount--;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
super.onError();
|
||||
mPageCount--;
|
||||
if (mDataHelper != null) {
|
||||
mDataHelper.onLoadMoreFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
Log.i("t2", "更多");
|
||||
if (mSmartRefreshLayout != null) {
|
||||
if (mDataCount <= 0) {
|
||||
mSmartRefreshLayout.finishLoadMoreWithNoMoreData();
|
||||
} else {
|
||||
mSmartRefreshLayout.finishLoadMore(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public <T> void setDataHelper(DataHelper<T> dataHelper) {
|
||||
mDataHelper = dataHelper;
|
||||
}
|
||||
|
||||
public void setLayoutManager(RecyclerView.LayoutManager layoutManager) {
|
||||
mRecyclerView.setLayoutManager(layoutManager);
|
||||
}
|
||||
|
||||
public void setItemDecoration(ItemDecoration itemDecoration) {
|
||||
mRecyclerView.addItemDecoration(itemDecoration);
|
||||
}
|
||||
|
||||
|
||||
public void showLoading() {
|
||||
mPageCount = 1;
|
||||
if (mSmartRefreshLayout != null) {
|
||||
mSmartRefreshLayout.autoRefreshAnimationOnly();
|
||||
}
|
||||
if (mEmptyLayout != null && mEmptyLayout.getVisibility() == VISIBLE) {
|
||||
mEmptyLayout.setVisibility(INVISIBLE);
|
||||
}
|
||||
if (mLoadFailureView != null && mLoadFailureView.getVisibility() == VISIBLE) {
|
||||
mLoadFailureView.setVisibility(INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
public void showRefreshBar() {
|
||||
if (mSmartRefreshLayout != null) {
|
||||
mSmartRefreshLayout.autoRefresh(100);//延迟400毫秒后自动刷新
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void showEmpty() {
|
||||
if (mEmptyLayout != null && mEmptyLayout.getVisibility() != VISIBLE) {
|
||||
mEmptyLayout.setVisibility(VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
public void hideEmpty() {
|
||||
if (mEmptyLayout != null && mEmptyLayout.getVisibility() == VISIBLE) {
|
||||
mEmptyLayout.setVisibility(INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
public void hideLoadFailure() {
|
||||
if (mLoadFailureView != null && mLoadFailureView.getVisibility() == VISIBLE) {
|
||||
mLoadFailureView.setVisibility(INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void initData() {
|
||||
Log.i("t2", "AAAs1212");
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
if (mDataHelper != null) {
|
||||
Log.i("t2", "AAAs");
|
||||
mPageCount = 1;
|
||||
mDataHelper.loadData(mPageCount, mRefreshCallback);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadMore() {
|
||||
Log.i("t2", "来了哦111");
|
||||
|
||||
if (mDataHelper != null) {
|
||||
Log.i("t2", "来了哦12121");
|
||||
mPageCount++;
|
||||
mDataHelper.loadData(mPageCount, mLoadMoreCallback);
|
||||
}
|
||||
}
|
||||
|
||||
public int getPageCount() {
|
||||
return mPageCount;
|
||||
}
|
||||
|
||||
public void setPageCount(int pageCount) {
|
||||
mPageCount = pageCount;
|
||||
}
|
||||
|
||||
|
||||
public int getItemCount() {
|
||||
return mItemCount;
|
||||
}
|
||||
|
||||
public void setItemCount(int itemCount) {
|
||||
mItemCount = itemCount;
|
||||
}
|
||||
|
||||
public void setRefreshEnable(boolean enable) {
|
||||
if (mSmartRefreshLayout != null) {
|
||||
mSmartRefreshLayout.setEnableRefresh(enable);
|
||||
}
|
||||
}
|
||||
|
||||
public void setLoadMoreEnable(boolean enable) {
|
||||
if (mSmartRefreshLayout != null) {
|
||||
mSmartRefreshLayout.setEnableLoadMore(enable);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v.getId() == R.id.btn_reload) {
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public interface DataHelper<T> {
|
||||
RefreshAdapter<T> getAdapter();
|
||||
|
||||
void loadData(int p, HttpCallback callback);
|
||||
|
||||
List<T> processData(String[] info);
|
||||
|
||||
/**
|
||||
* 下拉刷新成功
|
||||
*
|
||||
* @param list Adapter的全部数据的List
|
||||
* @param listCount Adapter的全部数据的个数
|
||||
*/
|
||||
void onRefreshSuccess(List<T> list, int listCount);
|
||||
|
||||
/**
|
||||
* 下拉刷新失败
|
||||
*/
|
||||
void onRefreshFailure();
|
||||
|
||||
/**
|
||||
* 上拉加载成功
|
||||
*
|
||||
* @param loadItemList 本次加载到的数据
|
||||
* @param loadItemCount 加载到的数据个数
|
||||
*/
|
||||
void onLoadMoreSuccess(List<T> loadItemList, int loadItemCount);
|
||||
|
||||
/**
|
||||
* 加载失败
|
||||
*/
|
||||
void onLoadMoreFailure();
|
||||
}
|
||||
|
||||
/**
|
||||
* 空数据的布局
|
||||
*/
|
||||
public void setEmptyLayoutId(int noDataLayoutId) {
|
||||
if (mEmptyLayout != null) {
|
||||
mEmptyLayout.removeAllViews();
|
||||
View v = LayoutInflater.from(mContext).inflate(noDataLayoutId, mEmptyLayout, false);
|
||||
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) v.getLayoutParams();
|
||||
params.gravity = Gravity.CENTER;
|
||||
v.setLayoutParams(params);
|
||||
mEmptyLayout.addView(v);
|
||||
}
|
||||
}
|
||||
|
||||
public View getContentView() {
|
||||
return mContentView;
|
||||
}
|
||||
|
||||
public void setRecyclerViewAdapter(RefreshAdapter adapter) {
|
||||
if (mRecyclerView != null) {
|
||||
mRecyclerView.setAdapter(adapter);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import androidx.appcompat.widget.AppCompatCheckBox;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/7/19.
|
||||
* 可以调节drawable大小的CheckBox
|
||||
*/
|
||||
|
||||
public class DrawableCheckBox extends AppCompatCheckBox {
|
||||
|
||||
private int mTopWidth;
|
||||
private int mTopHeight;
|
||||
private int mLeftWidth;
|
||||
private int mLeftHeight;
|
||||
private int mRightWidth;
|
||||
private int mRightHeight;
|
||||
private int mBottomWidth;
|
||||
private int mBottomHeight;
|
||||
private Drawable mTopDrawable;
|
||||
private Drawable mLeftDrawable;
|
||||
private Drawable mRightDrawable;
|
||||
private Drawable mBottomDrawable;
|
||||
|
||||
public DrawableCheckBox(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public DrawableCheckBox(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public DrawableCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DrawableTextView);
|
||||
mTopWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_width, 0);
|
||||
mTopHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_height, 0);
|
||||
mLeftWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_width, 0);
|
||||
mLeftHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_height, 0);
|
||||
mRightWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_width, 0);
|
||||
mRightHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_height, 0);
|
||||
mBottomWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_width, 0);
|
||||
mBottomHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_height, 0);
|
||||
mTopDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_top_drawable);
|
||||
mLeftDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_left_drawable);
|
||||
mRightDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_right_drawable);
|
||||
mBottomDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_bottom_drawable);
|
||||
ta.recycle();
|
||||
|
||||
}
|
||||
|
||||
public void setTopDrawable(Drawable topDrawable) {
|
||||
mTopDrawable = topDrawable;
|
||||
}
|
||||
|
||||
public void setBottomDrawable(Drawable bottomDrawable) {
|
||||
mBottomDrawable = bottomDrawable;
|
||||
}
|
||||
|
||||
public void setLeftDrawable(Drawable leftDrawable) {
|
||||
mLeftDrawable = leftDrawable;
|
||||
}
|
||||
|
||||
public void setRightDrawable(Drawable rightDrawable) {
|
||||
mRightDrawable = rightDrawable;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
setCompoundDrawablesWithIntrinsicBounds(mLeftDrawable, mTopDrawable, mRightDrawable, mBottomDrawable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) {
|
||||
if (left != null) {
|
||||
left.setBounds(0, 0, mLeftWidth, mLeftHeight);
|
||||
}
|
||||
if (top != null) {
|
||||
top.setBounds(0, 0, mTopWidth, mTopHeight);
|
||||
}
|
||||
if (right != null) {
|
||||
right.setBounds(0, 0, mRightWidth, mRightHeight);
|
||||
}
|
||||
if (bottom != null) {
|
||||
bottom.setBounds(0, 0, mBottomWidth, mBottomHeight);
|
||||
}
|
||||
setCompoundDrawables(left, top, right, bottom);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import androidx.appcompat.widget.AppCompatRadioButton;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/7/19.
|
||||
* 可以调节drawable大小的RadioButton
|
||||
*/
|
||||
|
||||
public class DrawableRadioButton extends AppCompatRadioButton {
|
||||
|
||||
private int mTopWidth;
|
||||
private int mTopHeight;
|
||||
private int mLeftWidth;
|
||||
private int mLeftHeight;
|
||||
private int mRightWidth;
|
||||
private int mRightHeight;
|
||||
private int mBottomWidth;
|
||||
private int mBottomHeight;
|
||||
private Drawable mTopDrawable;
|
||||
private Drawable mLeftDrawable;
|
||||
private Drawable mRightDrawable;
|
||||
private Drawable mBottomDrawable;
|
||||
|
||||
public DrawableRadioButton(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public DrawableRadioButton(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public DrawableRadioButton(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DrawableTextView);
|
||||
mTopWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_width, 0);
|
||||
mTopHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_height, 0);
|
||||
mLeftWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_width, 0);
|
||||
mLeftHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_height, 0);
|
||||
mRightWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_width, 0);
|
||||
mRightHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_height, 0);
|
||||
mBottomWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_width, 0);
|
||||
mBottomHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_height, 0);
|
||||
mTopDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_top_drawable);
|
||||
mLeftDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_left_drawable);
|
||||
mRightDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_right_drawable);
|
||||
mBottomDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_bottom_drawable);
|
||||
ta.recycle();
|
||||
|
||||
}
|
||||
|
||||
public void setTopDrawable(Drawable topDrawable) {
|
||||
mTopDrawable = topDrawable;
|
||||
}
|
||||
|
||||
public void setBottomDrawable(Drawable bottomDrawable) {
|
||||
mBottomDrawable = bottomDrawable;
|
||||
}
|
||||
|
||||
public void setLeftDrawable(Drawable leftDrawable) {
|
||||
mLeftDrawable = leftDrawable;
|
||||
}
|
||||
|
||||
public void setRightDrawable(Drawable rightDrawable) {
|
||||
mRightDrawable = rightDrawable;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
setCompoundDrawablesWithIntrinsicBounds(mLeftDrawable, mTopDrawable, mRightDrawable, mBottomDrawable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) {
|
||||
if (left != null) {
|
||||
left.setBounds(0, 0, mLeftWidth, mLeftHeight);
|
||||
}
|
||||
if (top != null) {
|
||||
top.setBounds(0, 0, mTopWidth, mTopHeight);
|
||||
}
|
||||
if (right != null) {
|
||||
right.setBounds(0, 0, mRightWidth, mRightHeight);
|
||||
}
|
||||
if (bottom != null) {
|
||||
bottom.setBounds(0, 0, mBottomWidth, mBottomHeight);
|
||||
}
|
||||
setCompoundDrawables(left, top, right, bottom);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import androidx.appcompat.widget.AppCompatRadioButton;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/7/19.
|
||||
* 可以调节drawable大小的RadioButton
|
||||
*/
|
||||
|
||||
public class DrawableRadioButton2 extends AppCompatRadioButton {
|
||||
|
||||
private int mTopWidth;
|
||||
private int mTopHeight;
|
||||
private int mLeftWidth;
|
||||
private int mLeftHeight;
|
||||
private int mRightWidth;
|
||||
private int mRightHeight;
|
||||
private int mBottomWidth;
|
||||
private int mBottomHeight;
|
||||
private Drawable mTopDrawable;
|
||||
private Drawable mLeftDrawable;
|
||||
private Drawable mRightDrawable;
|
||||
private Drawable mBottomDrawable;
|
||||
|
||||
public DrawableRadioButton2(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public DrawableRadioButton2(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public DrawableRadioButton2(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DrawableTextView);
|
||||
mTopWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_width, 0);
|
||||
mTopHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_height, 0);
|
||||
mLeftWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_width, 0);
|
||||
mLeftHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_height, 0);
|
||||
mRightWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_width, 0);
|
||||
mRightHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_height, 0);
|
||||
mBottomWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_width, 0);
|
||||
mBottomHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_height, 0);
|
||||
mTopDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_top_drawable);
|
||||
mLeftDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_left_drawable);
|
||||
mRightDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_right_drawable);
|
||||
mBottomDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_bottom_drawable);
|
||||
ta.recycle();
|
||||
|
||||
}
|
||||
|
||||
public void setTopDrawable(Drawable topDrawable) {
|
||||
mTopDrawable = topDrawable;
|
||||
}
|
||||
|
||||
public void setBottomDrawable(Drawable bottomDrawable) {
|
||||
mBottomDrawable = bottomDrawable;
|
||||
}
|
||||
|
||||
public void setLeftDrawable(Drawable leftDrawable) {
|
||||
mLeftDrawable = leftDrawable;
|
||||
}
|
||||
|
||||
public void setRightDrawable(Drawable rightDrawable) {
|
||||
mRightDrawable = rightDrawable;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
setCompoundDrawablesWithIntrinsicBounds(mLeftDrawable, mTopDrawable, mRightDrawable, mBottomDrawable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) {
|
||||
if (left != null) {
|
||||
left.setBounds(0, 0, mLeftWidth, mLeftHeight);
|
||||
}
|
||||
if (top != null) {
|
||||
top.setBounds(0, 0, mTopWidth, mTopHeight);
|
||||
}
|
||||
if (right != null) {
|
||||
right.setBounds(0, 0, mRightWidth, mRightHeight);
|
||||
}
|
||||
if (bottom != null) {
|
||||
bottom.setBounds(0, 0, mBottomWidth, mBottomHeight);
|
||||
}
|
||||
setCompoundDrawables(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChecked(boolean checked) {
|
||||
// super.setChecked(checked);
|
||||
}
|
||||
|
||||
public void doToggle() {
|
||||
super.setChecked(!isChecked());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2017/8/15.
|
||||
* 可以调节drawable大小的TextView
|
||||
*/
|
||||
|
||||
public class DrawableTextView extends AppCompatTextView {
|
||||
|
||||
private int mTopWidth;
|
||||
private int mTopHeight;
|
||||
private int mLeftWidth;
|
||||
private int mLeftHeight;
|
||||
private int mRightWidth;
|
||||
private int mRightHeight;
|
||||
private int mBottomWidth;
|
||||
private int mBottomHeight;
|
||||
private Drawable mTopDrawable;
|
||||
private Drawable mLeftDrawable;
|
||||
private Drawable mRightDrawable;
|
||||
private Drawable mBottomDrawable;
|
||||
|
||||
public DrawableTextView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public DrawableTextView(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
|
||||
public DrawableTextView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DrawableTextView);
|
||||
mTopWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_width, 0);
|
||||
mTopHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_top_height, 0);
|
||||
mLeftWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_width, 0);
|
||||
mLeftHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_left_height, 0);
|
||||
mRightWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_width, 0);
|
||||
mRightHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_right_height, 0);
|
||||
mBottomWidth = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_width, 0);
|
||||
mBottomHeight = (int) ta.getDimension(R.styleable.DrawableTextView_dt_bottom_height, 0);
|
||||
mTopDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_top_drawable);
|
||||
mLeftDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_left_drawable);
|
||||
mRightDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_right_drawable);
|
||||
mBottomDrawable = ta.getDrawable(R.styleable.DrawableTextView_dt_bottom_drawable);
|
||||
ta.recycle();
|
||||
}
|
||||
|
||||
public void setTopDrawable(Drawable topDrawable) {
|
||||
mTopDrawable = topDrawable;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void setBottomDrawable(Drawable bottomDrawable) {
|
||||
mBottomDrawable = bottomDrawable;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void setLeftDrawable(Drawable leftDrawable) {
|
||||
mLeftDrawable = leftDrawable;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void setRightDrawable(Drawable rightDrawable) {
|
||||
mRightDrawable = rightDrawable;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public Drawable getTopDrawable() {
|
||||
return mTopDrawable;
|
||||
}
|
||||
|
||||
public Drawable getLeftDrawable() {
|
||||
return mLeftDrawable;
|
||||
}
|
||||
|
||||
public Drawable getRightDrawable() {
|
||||
return mRightDrawable;
|
||||
}
|
||||
|
||||
public Drawable getBottomDrawable() {
|
||||
return mBottomDrawable;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
setCompoundDrawablesWithIntrinsicBounds(mLeftDrawable, mTopDrawable, mRightDrawable, mBottomDrawable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) {
|
||||
if (left != null) {
|
||||
left.setBounds(0, 0, mLeftWidth, mLeftHeight);
|
||||
}
|
||||
if (top != null) {
|
||||
top.setBounds(0, 0, mTopWidth, mTopHeight);
|
||||
}
|
||||
if (right != null) {
|
||||
right.setBounds(0, 0, mRightWidth, mRightHeight);
|
||||
}
|
||||
if (bottom != null) {
|
||||
bottom.setBounds(0, 0, mBottomWidth, mBottomHeight);
|
||||
}
|
||||
setCompoundDrawables(left, top, right, bottom);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/10/1.
|
||||
*
|
||||
* 问题:
|
||||
* AppBarLayout + RecycleView 滑动后,item 在一段时间内无法点击的问题
|
||||
* 1. 快速滑动 RecycleView 后,立即去点击 item 往往没有反应,第二次点击或者等待片刻后点击可以生效。
|
||||
* 2. 缓慢滑动后,立即点击 item,发现大多数情况下是有反应的。
|
||||
*
|
||||
* 现象:
|
||||
* 重写 AppBarLayout.Behavior 打印 log,发现在快速滑动到顶部和底部之后,
|
||||
* AppBarLayout 在一段时间内还处于 Fling 状态,那么我们想办法把这段无效的 Fling 干掉就好了。
|
||||
*
|
||||
* 结论:
|
||||
* 最后翻找 google 的时候发现这是 google 在修复上个版本嵌套滑动的时候引进来的新 bug。。。
|
||||
*/
|
||||
|
||||
public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior {
|
||||
|
||||
public FixAppBarLayoutBehavior() {
|
||||
super();
|
||||
}
|
||||
|
||||
public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
|
||||
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
|
||||
stopNestedScrollIfNeeded(dyUnconsumed, child, target, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
|
||||
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
|
||||
stopNestedScrollIfNeeded(dy, child, target, type);
|
||||
}
|
||||
|
||||
private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) {
|
||||
if (type == ViewCompat.TYPE_NON_TOUCH) {
|
||||
final int currOffset = getTopAndBottomOffset();
|
||||
if ((dy < 0 && currOffset == 0) || (dy > 0 && currOffset == -child.getTotalScrollRange())) {
|
||||
ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,595 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.Dimension;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* RecyclerView分割线
|
||||
*/
|
||||
|
||||
public class ItemDecoration extends RecyclerView.ItemDecoration {
|
||||
private static final String TAG = "ItemDecoration";
|
||||
private Drawable mDivider;
|
||||
private int dividerHeight;
|
||||
private int dividerWidth;
|
||||
private int dividerColor;
|
||||
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
|
||||
private static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
|
||||
private static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
|
||||
/**
|
||||
* 设置是否显示左右边界线
|
||||
*/
|
||||
private boolean drawBorderLeftAndRight = false;
|
||||
/**
|
||||
* 设置是否显示上下边界线
|
||||
*/
|
||||
private boolean drawBorderTopAndBottom = false;
|
||||
|
||||
/**
|
||||
* 是否只留空白,不画分割线
|
||||
*/
|
||||
private boolean onlySetItemOffsetsButNoDraw=false;
|
||||
|
||||
/**
|
||||
* 是否是线性布局
|
||||
*/
|
||||
private boolean isLinearLayoutManager=true;
|
||||
/**
|
||||
* 布局方向
|
||||
*/
|
||||
private int orientation=VERTICAL_LIST;
|
||||
|
||||
public ItemDecoration(Context context) {
|
||||
final TypedArray a = context.obtainStyledAttributes(ATTRS);
|
||||
mDivider = a.getDrawable(0);
|
||||
a.recycle();
|
||||
this.dividerHeight=mDivider.getIntrinsicHeight();
|
||||
this.dividerWidth=mDivider.getIntrinsicWidth();
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义分割线
|
||||
*
|
||||
* @param context
|
||||
* @param drawableId 分割线图片
|
||||
*/
|
||||
public ItemDecoration(Context context, @DrawableRes int drawableId) {
|
||||
mDivider = ContextCompat.getDrawable(context, drawableId);
|
||||
this.dividerHeight=mDivider.getIntrinsicHeight();
|
||||
this.dividerWidth=mDivider.getIntrinsicWidth();
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义分割线
|
||||
* 也可以使用{@link Canvas#drawRect(float, float, float, float, Paint)}或者{@link Canvas#drawText(String, float, float, Paint)}等等
|
||||
* 结合{@link Paint}去绘制各式各样的分割线
|
||||
* @param context
|
||||
* @param color 整型颜色值,非资源id
|
||||
* @param dividerWidth 单位为dp
|
||||
* @param dividerHeight 单位为dp
|
||||
*/
|
||||
public ItemDecoration(Context context, @ColorInt int color, @Dimension float dividerWidth, @Dimension float dividerHeight) {
|
||||
mDivider = new ColorDrawable(color);
|
||||
this.dividerWidth= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dividerWidth,context.getResources().getDisplayMetrics());
|
||||
this.dividerHeight= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dividerHeight,context.getResources().getDisplayMetrics());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 垂直滚动,item宽度充满,高度自适应
|
||||
* 水平滚动,item高度充满,宽度自适应
|
||||
* 在itemView绘制完成之前调用,也就是说此方法draw出来的效果将会在itemView的下面
|
||||
* onDrawOver方法draw出来的效果将叠加在itemView的上面
|
||||
* @param c
|
||||
* @param parent
|
||||
* @param state
|
||||
*/
|
||||
@Override
|
||||
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
||||
if(onlySetItemOffsetsButNoDraw){
|
||||
return;
|
||||
}
|
||||
if(isLinearLayoutManager){
|
||||
drawLinearItemDivider(c,parent);
|
||||
}else{
|
||||
drawHorizontalLine(c, parent);
|
||||
drawVerticalLine(c, parent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void drawLinearItemDivider(Canvas c, RecyclerView parent){
|
||||
int spanCount = getSpanCount(parent);
|
||||
int allChildCount = parent.getAdapter().getItemCount();
|
||||
int top=0,bottom=0,left=0,right=0;
|
||||
for (int i = 0; i < parent.getChildCount(); i++) {
|
||||
final View child = parent.getChildAt(i);
|
||||
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
|
||||
if(orientation==VERTICAL_LIST){//画横线
|
||||
left = child.getLeft() - params.leftMargin;
|
||||
right = child.getRight() + params.rightMargin;
|
||||
if(drawBorderTopAndBottom){
|
||||
//加上第一条
|
||||
if(isFirstRaw(parent,params.getViewLayoutPosition(),spanCount)){
|
||||
top=child.getTop()-params.topMargin-dividerHeight;
|
||||
bottom = top + dividerHeight;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}else{
|
||||
if(isLastRaw(parent,params.getViewLayoutPosition(),spanCount,allChildCount)){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
top = child.getBottom() + params.bottomMargin;
|
||||
bottom = top + dividerHeight;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}else{//画竖线
|
||||
top=child.getTop()-params.topMargin;
|
||||
bottom=child.getBottom()+params.bottomMargin;
|
||||
if(drawBorderLeftAndRight){
|
||||
//加上第一条
|
||||
if(isFirstColumn(parent,params.getViewLayoutPosition(),spanCount)){
|
||||
left=child.getLeft()-params.leftMargin-dividerWidth;
|
||||
right = left + dividerWidth;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}else{
|
||||
if(isLastColum(parent,params.getViewLayoutPosition(),spanCount,allChildCount)){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
left = child.getRight() + params.rightMargin;
|
||||
right = left + dividerWidth;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}
|
||||
if(orientation==VERTICAL_LIST){
|
||||
if(drawBorderLeftAndRight){
|
||||
top = parent.getPaddingTop();
|
||||
bottom = parent.getHeight() - parent.getPaddingBottom();
|
||||
left=parent.getPaddingLeft();
|
||||
right=left+dividerWidth;
|
||||
//画左边界
|
||||
mDivider.setBounds(left,top,right,bottom);
|
||||
mDivider.draw(c);
|
||||
left=parent.getWidth()-parent.getPaddingRight()-dividerWidth;
|
||||
right=left+dividerWidth;
|
||||
// Log.e(TAG, "drawLinearItemDivider: "+parent.getWidth()+"#"+parent.getPaddingLeft()+"#"+mDivider.getIntrinsicWidth() );
|
||||
//画右边界
|
||||
mDivider.setBounds(left,top,right,bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}else if(orientation==HORIZONTAL_LIST){
|
||||
if(drawBorderTopAndBottom){
|
||||
left=parent.getPaddingLeft();
|
||||
right=parent.getWidth()-parent.getPaddingRight();
|
||||
top=parent.getPaddingTop();
|
||||
bottom=top+dividerHeight;
|
||||
//画上边界
|
||||
mDivider.setBounds(left,top,right,bottom);
|
||||
mDivider.draw(c);
|
||||
top=parent.getHeight()-parent.getPaddingBottom()-dividerHeight;
|
||||
bottom=top+dividerHeight;
|
||||
//画下边界
|
||||
mDivider.setBounds(left,top,right,bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 画水平分割线
|
||||
* @param c
|
||||
* @param parent
|
||||
*/
|
||||
private void drawHorizontalLine(Canvas c, RecyclerView parent) {
|
||||
int spanCount = getSpanCount(parent);
|
||||
for (int i = 0; i < parent.getChildCount(); i++) {
|
||||
final View child = parent.getChildAt(i);
|
||||
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
|
||||
int top=0,bottom=0,left=0,right=0;
|
||||
left = child.getLeft() - params.leftMargin;
|
||||
//因为getItemOffsets中为竖线留了空隙,所以要加上分割线的宽度(在此处处理,下面不用处理)
|
||||
right = child.getRight() + params.rightMargin+ dividerWidth;
|
||||
if(i==parent.getChildCount()-1 && !drawBorderLeftAndRight){
|
||||
right-=dividerWidth;//防止最后一个越界
|
||||
}
|
||||
|
||||
if(isFirstColumn(parent,params.getViewLayoutPosition(),spanCount) && drawBorderLeftAndRight){
|
||||
left-=dividerWidth;//下面不用处理
|
||||
}
|
||||
if(drawBorderTopAndBottom){
|
||||
//加上第一条
|
||||
if(isFirstRaw(parent,params.getViewLayoutPosition(),spanCount)){
|
||||
top=child.getTop()-params.topMargin-dividerHeight;
|
||||
bottom = top + dividerHeight;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}else{
|
||||
int allChildCount = parent.getAdapter().getItemCount();
|
||||
if(isLastRaw(parent,params.getViewLayoutPosition(),spanCount,allChildCount)){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// Log.e(TAG, "drawVertical: "+params.getViewLayoutPosition()+"@@"+mDivider.getIntrinsicWidth()+"#"+parent.getLayoutManager().getLeftDecorationWidth(child) );
|
||||
top = child.getBottom() + params.bottomMargin;
|
||||
bottom = top + dividerHeight;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 画垂直分割线
|
||||
* @param c
|
||||
* @param parent
|
||||
*/
|
||||
private void drawVerticalLine(Canvas c, RecyclerView parent) {
|
||||
int spanCount = getSpanCount(parent);
|
||||
for (int i = 0; i < parent.getChildCount(); i++) {
|
||||
final View child = parent.getChildAt(i);
|
||||
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams();
|
||||
int left=0,right=0,top=0,bottom=0;
|
||||
top=child.getTop()-params.topMargin;
|
||||
//因为getItemOffsets中为横线留了空隙,所以要加上分割线的高度(上下加一处即可)
|
||||
bottom=child.getBottom()+params.bottomMargin/**+mDivider.getIntrinsicHeight()*/;
|
||||
// if(isFirstRaw(parent,params.getViewLayoutPosition(),spanCount) && drawBorderTopAndBottom){
|
||||
// top-=mDivider.getIntrinsicHeight();
|
||||
// }
|
||||
if(drawBorderLeftAndRight){
|
||||
//加上第一条
|
||||
if(isFirstColumn(parent,params.getViewLayoutPosition(),spanCount)){
|
||||
left=child.getLeft()-params.leftMargin-dividerWidth;
|
||||
right = left + dividerWidth;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}else{
|
||||
int allChildCount = parent.getAdapter().getItemCount();
|
||||
if(isLastColum(parent,params.getViewLayoutPosition(),spanCount,allChildCount)){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
left = child.getRight() + params.rightMargin;
|
||||
right = left + dividerWidth;
|
||||
mDivider.setBounds(left, top, right, bottom);
|
||||
mDivider.draw(c);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* item的偏移,如果不设置,也能画线,但是画在了item后面(被item挡住了,可以通过设置item背景透明度证实)
|
||||
* @param outRect
|
||||
* @param view
|
||||
* @param parent
|
||||
* @param state
|
||||
*/
|
||||
@Override
|
||||
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
||||
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
|
||||
if(!(layoutManager instanceof LinearLayoutManager)){
|
||||
throw new IllegalStateException("The LayoutManager must be LinearLayoutManager or it's subclass!!!");
|
||||
}
|
||||
isLinearLayoutManager=(layoutManager instanceof LinearLayoutManager) && !(layoutManager instanceof GridLayoutManager);
|
||||
if(isLinearLayoutManager){
|
||||
orientation=((LinearLayoutManager) layoutManager).getOrientation();
|
||||
}else{
|
||||
orientation=(layoutManager instanceof GridLayoutManager)?((GridLayoutManager) layoutManager).getOrientation():((StaggeredGridLayoutManager)layoutManager).getOrientation();
|
||||
}
|
||||
int spanCount = getSpanCount(parent);
|
||||
int childCount = parent.getAdapter().getItemCount();
|
||||
int itemPosition=((RecyclerView.LayoutParams) view.getLayoutParams()).getViewLayoutPosition();
|
||||
// Log.e(TAG, "getItemOffsets: "+childCount+"$"+spanCount+"$"+itemPosition );
|
||||
boolean isLastRaw=isLastRaw(parent, itemPosition, spanCount, childCount);
|
||||
boolean isLastColum=isLastColum(parent, itemPosition, spanCount, childCount);
|
||||
boolean isFirstRaw=isFirstRaw(parent,itemPosition,spanCount);
|
||||
boolean isFirstColumn=isFirstColumn(parent,itemPosition,spanCount);
|
||||
int left=0,top=0,right=0,bottom=0;
|
||||
if(isLinearLayoutManager){
|
||||
if(orientation==VERTICAL_LIST){
|
||||
//垂直滚动线性布局
|
||||
bottom=dividerHeight;
|
||||
if(isLastRaw && !drawBorderTopAndBottom){
|
||||
bottom=0;
|
||||
}
|
||||
if(isFirstRaw && drawBorderTopAndBottom){
|
||||
top=dividerHeight;
|
||||
}
|
||||
if(drawBorderLeftAndRight){
|
||||
left=dividerWidth;
|
||||
right=dividerWidth;
|
||||
}
|
||||
}else if(orientation==HORIZONTAL_LIST){
|
||||
right=dividerWidth;
|
||||
if(isLastColum && !drawBorderLeftAndRight){
|
||||
right=0;
|
||||
}
|
||||
if(isFirstColumn && drawBorderLeftAndRight){
|
||||
left=dividerWidth;
|
||||
}
|
||||
if(drawBorderTopAndBottom){
|
||||
top=dividerHeight;
|
||||
bottom=dividerHeight;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
GridLayoutManager.SpanSizeLookup spanSizeLookup = ((GridLayoutManager)layoutManager).getSpanSizeLookup();
|
||||
int spanIndexLeft = spanSizeLookup.getSpanIndex(itemPosition, spanCount);//左边的跨度索引值[0,spanCount)之间
|
||||
int spanIndexRight = spanIndexLeft - 1 + spanSizeLookup.getSpanSize(itemPosition);//右边的跨度索引值[0,spanCount)之间
|
||||
// Log.e(TAG, "getItemOffsets: "+spanIndexLeft +"#"+spanIndexRight+"#"+itemPosition+"$$$"+spanSizeLookup.getSpanGroupIndex(itemPosition, spanCount));
|
||||
if(orientation==VERTICAL_LIST){
|
||||
if(drawBorderLeftAndRight){
|
||||
//注:如果此处不能整除,会造成divider的宽或高不统一的bug(下同),因为Rect不支持float,所以暂无法解决
|
||||
left=dividerWidth * (spanCount - spanIndexLeft) / spanCount;
|
||||
right=dividerWidth * (spanIndexRight + 1) / spanCount;
|
||||
}else{
|
||||
left = dividerWidth * spanIndexLeft / spanCount;
|
||||
right = dividerWidth * (spanCount - spanIndexRight - 1) / spanCount;
|
||||
}
|
||||
if(drawBorderTopAndBottom){
|
||||
if (spanSizeLookup.getSpanGroupIndex(itemPosition, spanCount) == 0) {
|
||||
top = dividerHeight;
|
||||
} else {
|
||||
top = 0;
|
||||
}
|
||||
bottom = dividerHeight;
|
||||
}else{
|
||||
if (isLastRaw) {
|
||||
bottom=0;
|
||||
} else {
|
||||
bottom = dividerHeight;
|
||||
}
|
||||
top=0;
|
||||
}
|
||||
}else if(orientation==HORIZONTAL_LIST){
|
||||
if(drawBorderTopAndBottom){
|
||||
top=dividerHeight * (spanCount - spanIndexLeft) / spanCount;
|
||||
bottom=dividerHeight * (spanIndexRight + 1) / spanCount;
|
||||
}else{
|
||||
top = dividerHeight * spanIndexLeft / spanCount;
|
||||
bottom = dividerHeight * (spanCount - spanIndexRight - 1) / spanCount;
|
||||
}
|
||||
if(drawBorderLeftAndRight){
|
||||
if(isFirstColumn){
|
||||
left=dividerWidth;
|
||||
}else{
|
||||
left=0;
|
||||
}
|
||||
right=dividerWidth;
|
||||
}else{
|
||||
if(isLastColum){
|
||||
right=0;
|
||||
}else{
|
||||
right=dividerWidth;
|
||||
}
|
||||
left=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//Log.e(TAG, "getItemOffsets: "+left+"@"+top+"#"+right+"$"+bottom+"%"+itemPosition );
|
||||
outRect.set(left,top,right,bottom);
|
||||
}
|
||||
|
||||
private boolean isFirstRaw(RecyclerView parent, int pos, int spanCount){
|
||||
if (!isLinearLayoutManager) {
|
||||
GridLayoutManager.SpanSizeLookup spanSizeLookup = ((GridLayoutManager)parent.getLayoutManager()).getSpanSizeLookup();
|
||||
int spanIndexLeft = spanSizeLookup.getSpanIndex(pos, spanCount);
|
||||
if (orientation == GridLayoutManager.VERTICAL) {
|
||||
// if(pos<spanCount){
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
if(spanSizeLookup.getSpanGroupIndex(pos,spanCount)==0){
|
||||
return true;
|
||||
}
|
||||
}else{
|
||||
// if(pos%spanCount==0){
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
if(spanIndexLeft==0){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (orientation == LinearLayoutManager.VERTICAL) {
|
||||
if(pos==0){
|
||||
return true;
|
||||
}
|
||||
}else{
|
||||
//每一个都是第一行,也是最后一行
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isFirstColumn(RecyclerView parent, int pos, int spanCount){
|
||||
if (!isLinearLayoutManager) {
|
||||
GridLayoutManager.SpanSizeLookup spanSizeLookup = ((GridLayoutManager)parent.getLayoutManager()).getSpanSizeLookup();
|
||||
int spanIndexLeft = spanSizeLookup.getSpanIndex(pos, spanCount);
|
||||
if (orientation == GridLayoutManager.VERTICAL) {
|
||||
// if(pos%spanCount==0){
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
if(spanIndexLeft==0){
|
||||
return true;
|
||||
}
|
||||
}else{
|
||||
// if(pos<spanCount){
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
if(spanSizeLookup.getSpanGroupIndex(pos,spanCount)==0){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (orientation == LinearLayoutManager.VERTICAL) {
|
||||
//每一个都是第一列,也是最后一列
|
||||
return true;
|
||||
}else{
|
||||
if(pos==0){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isLastColum(RecyclerView parent, int pos, int spanCount, int childCount) {
|
||||
if (!isLinearLayoutManager) {
|
||||
GridLayoutManager.SpanSizeLookup spanSizeLookup = ((GridLayoutManager)parent.getLayoutManager()).getSpanSizeLookup();
|
||||
int spanIndexLeft = spanSizeLookup.getSpanIndex(pos, spanCount);
|
||||
if (orientation == GridLayoutManager.VERTICAL) {
|
||||
//最后一列或者不能整除的情况下最后一个
|
||||
// if ((pos + 1) % spanCount == 0 /**|| pos==childCount-1*/){// 如果是最后一列
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
if(spanIndexLeft==spanCount-1 || spanCount==spanSizeLookup.getSpanSize(pos) || pos==childCount-1){
|
||||
return true;
|
||||
}
|
||||
}else{
|
||||
// if(pos>=childCount-spanCount && childCount%spanCount==0){
|
||||
// //整除的情况判断最后一整列
|
||||
// return true;
|
||||
// }else if(childCount%spanCount!=0 && pos>=spanCount*(childCount/spanCount)){
|
||||
// //不能整除的情况只判断最后几个
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案==============================
|
||||
// if(pos>=childCount-spanCount){
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
int lastItemSpanGroupIndex=spanSizeLookup.getSpanGroupIndex(childCount-1,spanCount);
|
||||
if(spanSizeLookup.getSpanGroupIndex(pos,spanCount)==lastItemSpanGroupIndex){
|
||||
return true;//如果与最后一个元素同组则判定为最后一行
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (orientation == LinearLayoutManager.VERTICAL) {
|
||||
//每一个都是第一列,也是最后一列
|
||||
return true;
|
||||
}else{
|
||||
if(pos==childCount-1){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isLastRaw(RecyclerView parent, int pos, int spanCount, int childCount) {
|
||||
if (!isLinearLayoutManager) {
|
||||
GridLayoutManager.SpanSizeLookup spanSizeLookup = ((GridLayoutManager)parent.getLayoutManager()).getSpanSizeLookup();
|
||||
int spanIndexLeft = spanSizeLookup.getSpanIndex(pos, spanCount);
|
||||
if (orientation == GridLayoutManager.VERTICAL) {
|
||||
// if(pos>=childCount-spanCount && childCount%spanCount==0){
|
||||
// //整除的情况判断最后一整行
|
||||
// return true;
|
||||
// }else if(childCount%spanCount!=0 && pos>=spanCount*(childCount/spanCount)){
|
||||
// //不能整除的情况只判断最后几个
|
||||
// return true;
|
||||
// }
|
||||
//=======================另一种方案===============================
|
||||
// if(pos>=childCount-spanCount){
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
//判断最后一行是否充满整行
|
||||
boolean flag=spanSizeLookup.getSpanIndex(childCount-1, spanCount)==spanCount-1 || spanCount==spanSizeLookup.getSpanSize(childCount-1);
|
||||
int lastItemSpanGroupIndex=spanSizeLookup.getSpanGroupIndex(childCount-1,spanCount);
|
||||
if(spanSizeLookup.getSpanGroupIndex(pos,spanCount)==lastItemSpanGroupIndex){
|
||||
return true;//如果与最后一个元素同组则判定为最后一行
|
||||
}
|
||||
// if(flag){
|
||||
// }else{
|
||||
// //没有充满则前一行跟最后一行都判定为最后一行
|
||||
// if(spanSizeLookup.getSpanGroupIndex(pos,spanCount)==lastItemSpanGroupIndex || spanSizeLookup.getSpanGroupIndex(pos,spanCount)==lastItemSpanGroupIndex-1){
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
}else{
|
||||
//最后一行或者不能整除的情况下最后一个
|
||||
// if ((pos + 1) % spanCount == 0 /**|| pos==childCount-1*/){// 如果是最后一行
|
||||
// return true;
|
||||
// }
|
||||
//=========================另一种方案,兼容每个item的spanSize不同的情况==============================
|
||||
if(spanIndexLeft==spanCount-1 || spanCount==spanSizeLookup.getSpanSize(pos) || pos==childCount-1){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (orientation == LinearLayoutManager.VERTICAL) {
|
||||
if(pos==childCount-1){
|
||||
return true;
|
||||
}
|
||||
}else{
|
||||
//每一个都是第一行,也是最后一行
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private int getSpanCount(RecyclerView parent) {
|
||||
// 列数
|
||||
int spanCount = -1;
|
||||
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
|
||||
if (layoutManager instanceof GridLayoutManager) {
|
||||
spanCount = ((GridLayoutManager) layoutManager).getSpanCount();
|
||||
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
|
||||
spanCount = ((StaggeredGridLayoutManager) layoutManager).getSpanCount();
|
||||
}
|
||||
return spanCount;
|
||||
}
|
||||
|
||||
public boolean isDrawBorderTopAndBottom() {
|
||||
return drawBorderTopAndBottom;
|
||||
}
|
||||
|
||||
public void setDrawBorderTopAndBottom(boolean drawBorderTopAndBottom) {
|
||||
this.drawBorderTopAndBottom = drawBorderTopAndBottom;
|
||||
}
|
||||
|
||||
public boolean isDrawBorderLeftAndRight() {
|
||||
return drawBorderLeftAndRight;
|
||||
}
|
||||
|
||||
public void setDrawBorderLeftAndRight(boolean drawBorderLeftAndRight) {
|
||||
this.drawBorderLeftAndRight = drawBorderLeftAndRight;
|
||||
}
|
||||
|
||||
public boolean isOnlySetItemOffsetsButNoDraw() {
|
||||
return onlySetItemOffsetsButNoDraw;
|
||||
}
|
||||
|
||||
public void setOnlySetItemOffsetsButNoDraw(boolean onlySetItemOffsetsButNoDraw) {
|
||||
this.onlySetItemOffsetsButNoDraw = onlySetItemOffsetsButNoDraw;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,366 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import androidx.core.view.GestureDetectorCompat;
|
||||
import androidx.core.view.MotionEventCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewConfiguration;
|
||||
|
||||
/**
|
||||
* 消息列表左滑菜单帮助类
|
||||
*/
|
||||
public class ItemSlideHelper implements RecyclerView.OnItemTouchListener, GestureDetector.OnGestureListener {
|
||||
|
||||
private final int DEFAULT_DURATION = 150;
|
||||
private View mTargetView;
|
||||
|
||||
private int mActivePointerId;
|
||||
private int mTouchSlop;
|
||||
private int mMaxVelocity;
|
||||
private int mMinVelocity;
|
||||
private int mLastX;
|
||||
private int mLastY;
|
||||
|
||||
private boolean mIsDragging;
|
||||
private Animator mExpandAndCollapseAnim;
|
||||
private GestureDetectorCompat mGestureDetector;
|
||||
|
||||
private Callback mCallback;
|
||||
|
||||
public ItemSlideHelper(Context context, Callback callback) {
|
||||
this.mCallback = callback;
|
||||
|
||||
//手势用于处理fling
|
||||
mGestureDetector = new GestureDetectorCompat(context, this);
|
||||
|
||||
ViewConfiguration configuration = ViewConfiguration.get(context);
|
||||
mTouchSlop = configuration.getScaledTouchSlop();
|
||||
mMaxVelocity = configuration.getScaledMaximumFlingVelocity();
|
||||
mMinVelocity = configuration.getScaledMinimumFlingVelocity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
|
||||
int action = MotionEventCompat.getActionMasked(e);
|
||||
int x = (int) e.getX();
|
||||
int y = (int) e.getY();
|
||||
|
||||
|
||||
//如果RecyclerView滚动状态不是空闲targetView不是空
|
||||
if (rv.getScrollState() != RecyclerView.SCROLL_STATE_IDLE) {
|
||||
if (mTargetView != null) {
|
||||
//隐藏已经打开
|
||||
smoothHorizontalExpandOrCollapse(DEFAULT_DURATION / 2);
|
||||
mTargetView = null;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//如果正在运行动画 ,直接拦截什么都不做
|
||||
if (mExpandAndCollapseAnim != null && mExpandAndCollapseAnim.isRunning()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean needIntercept = false;
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
|
||||
mActivePointerId = MotionEventCompat.getPointerId(e, 0);
|
||||
mLastX = (int) e.getX();
|
||||
mLastY = (int) e.getY();
|
||||
|
||||
/*
|
||||
* 如果之前有一个已经打开的项目,当此次点击事件没有发生在右侧的菜单中则返回TRUE,
|
||||
* 如果点击的是右侧菜单那么返回FALSE这样做的原因是因为菜单需要响应Onclick
|
||||
* */
|
||||
if (mTargetView != null) {
|
||||
return !inView(x, y);
|
||||
}
|
||||
|
||||
//查找需要显示菜单的view;
|
||||
mTargetView = mCallback.findTargetView(x, y);
|
||||
|
||||
break;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
|
||||
int deltaX = (x - mLastX);
|
||||
int deltaY = (y - mLastY);
|
||||
|
||||
if (Math.abs(deltaY) > Math.abs(deltaX))
|
||||
return false;
|
||||
|
||||
//如果移动距离达到要求,则拦截
|
||||
needIntercept = mIsDragging = mTargetView != null && Math.abs(deltaX) >= mTouchSlop;
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
case MotionEvent.ACTION_UP:
|
||||
/*
|
||||
* 走这是因为没有发生过拦截事件
|
||||
* */
|
||||
if (isExpanded()) {
|
||||
|
||||
if (inView(x, y)) {
|
||||
// 如果走这那行这个ACTION_UP的事件会发生在右侧的菜单中
|
||||
} else {
|
||||
//拦截事件,防止targetView执行onClick事件
|
||||
needIntercept = true;
|
||||
}
|
||||
|
||||
//折叠菜单
|
||||
smoothHorizontalExpandOrCollapse(DEFAULT_DURATION / 2);
|
||||
}
|
||||
|
||||
mTargetView = null;
|
||||
break;
|
||||
}
|
||||
|
||||
return needIntercept;
|
||||
}
|
||||
|
||||
private boolean isExpanded() {
|
||||
int range = getHorizontalRange();
|
||||
if (range == 0) {
|
||||
return false;
|
||||
}
|
||||
return mTargetView != null && mTargetView.getScrollX() == range;
|
||||
}
|
||||
|
||||
private boolean isCollapsed() {
|
||||
|
||||
return mTargetView != null && mTargetView.getScrollX() == 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 根据targetView的scrollX计算出targetView的偏移,这样能够知道这个point
|
||||
* 是在右侧的菜单中
|
||||
* */
|
||||
private boolean inView(int x, int y) {
|
||||
|
||||
if (mTargetView == null)
|
||||
return false;
|
||||
|
||||
int scrollX = mTargetView.getScrollX();
|
||||
int left = mTargetView.getWidth() - scrollX;
|
||||
int top = mTargetView.getTop();
|
||||
int right = left + getHorizontalRange();
|
||||
int bottom = mTargetView.getBottom();
|
||||
Rect rect = new Rect(left, top, right, bottom);
|
||||
return rect.contains(x, y);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
|
||||
if (mExpandAndCollapseAnim != null && mExpandAndCollapseAnim.isRunning() || mTargetView == null)
|
||||
return;
|
||||
|
||||
//如果要响应fling事件设置将mIsDragging设为false
|
||||
if (mGestureDetector.onTouchEvent(e)) {
|
||||
mIsDragging = false;
|
||||
return;
|
||||
}
|
||||
|
||||
int x = (int) e.getX();
|
||||
int y = (int) e.getY();
|
||||
int action = MotionEventCompat.getActionMasked(e);
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
//RecyclerView 不会转发这个Down事件
|
||||
|
||||
break;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
int deltaX = (int) (mLastX - e.getX());
|
||||
if (mIsDragging) {
|
||||
horizontalDrag(deltaX);
|
||||
}
|
||||
mLastX = x;
|
||||
break;
|
||||
|
||||
case MotionEvent.ACTION_UP:
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
|
||||
if (mIsDragging) {
|
||||
if (!smoothHorizontalExpandOrCollapse(0) && isCollapsed())
|
||||
mTargetView = null;
|
||||
|
||||
mIsDragging = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据touch事件来滚动View的scrollX
|
||||
*
|
||||
* @param delta
|
||||
*/
|
||||
private void horizontalDrag(int delta) {
|
||||
if (mCallback != null && !mCallback.useLeftScroll()) {
|
||||
if(delta > 0){
|
||||
RecyclerView.ViewHolder viewHolder = mCallback.getChildViewHolder(mTargetView);
|
||||
mCallback.onLeftScroll(viewHolder);
|
||||
}
|
||||
return;
|
||||
}
|
||||
int scrollX = mTargetView.getScrollX();
|
||||
int scrollY = mTargetView.getScrollY();
|
||||
if ((scrollX + delta) <= 0) {
|
||||
mTargetView.scrollTo(0, scrollY);
|
||||
return;
|
||||
}
|
||||
|
||||
int horRange = getHorizontalRange();
|
||||
scrollX += delta;
|
||||
if (Math.abs(scrollX) < horRange) {
|
||||
mTargetView.scrollTo(scrollX, scrollY);
|
||||
} else {
|
||||
mTargetView.scrollTo(horRange, scrollY);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据当前scrollX的位置判断是展开还是折叠
|
||||
*
|
||||
* @param velocityX 如果不等于0那么这是一次fling事件,否则是一次ACTION_UP或者ACTION_CANCEL
|
||||
*/
|
||||
private boolean smoothHorizontalExpandOrCollapse(float velocityX) {
|
||||
|
||||
int scrollX = mTargetView.getScrollX();
|
||||
int scrollRange = getHorizontalRange();
|
||||
|
||||
if (mExpandAndCollapseAnim != null)
|
||||
return false;
|
||||
|
||||
int to = 0;
|
||||
int duration = DEFAULT_DURATION;
|
||||
|
||||
if (velocityX == 0) {
|
||||
//如果已经展一半,平滑展开
|
||||
if (scrollX > scrollRange / 2) {
|
||||
to = scrollRange;
|
||||
}
|
||||
} else {
|
||||
|
||||
if (velocityX > 0)
|
||||
to = 0;
|
||||
else
|
||||
to = scrollRange;
|
||||
|
||||
duration = (int) ((1.f - Math.abs(velocityX) / mMaxVelocity) * DEFAULT_DURATION);
|
||||
}
|
||||
|
||||
if (to == scrollX) {
|
||||
return false;
|
||||
}
|
||||
mExpandAndCollapseAnim = ObjectAnimator.ofInt(mTargetView, "scrollX", to);
|
||||
mExpandAndCollapseAnim.setDuration(duration);
|
||||
mExpandAndCollapseAnim.addListener(new Animator.AnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationStart(Animator animation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mExpandAndCollapseAnim = null;
|
||||
if (isCollapsed())
|
||||
mTargetView = null;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationCancel(Animator animation) {
|
||||
//onAnimationEnd(animation);
|
||||
mExpandAndCollapseAnim = null;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationRepeat(Animator animation) {
|
||||
|
||||
}
|
||||
});
|
||||
mExpandAndCollapseAnim.start();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getHorizontalRange() {
|
||||
RecyclerView.ViewHolder viewHolder = mCallback.getChildViewHolder(mTargetView);
|
||||
if (viewHolder == null) {
|
||||
return 0;
|
||||
}
|
||||
return mCallback.getHorizontalRange(viewHolder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onDown(MotionEvent e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSingleTapUp(MotionEvent e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||
|
||||
if (Math.abs(velocityX) > mMinVelocity && Math.abs(velocityX) < mMaxVelocity) {
|
||||
if (!smoothHorizontalExpandOrCollapse(velocityX)) {
|
||||
if (isCollapsed())
|
||||
mTargetView = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 左滑菜单Callback
|
||||
*/
|
||||
public interface Callback {
|
||||
|
||||
int getHorizontalRange(RecyclerView.ViewHolder holder);
|
||||
|
||||
RecyclerView.ViewHolder getChildViewHolder(View childView);
|
||||
|
||||
View findTargetView(float x, float y);
|
||||
|
||||
//是否使用左滑删除
|
||||
boolean useLeftScroll();
|
||||
|
||||
void onLeftScroll(RecyclerView.ViewHolder holder);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.AttrRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/27.
|
||||
*/
|
||||
|
||||
public class MyFrameLayout1 extends FrameLayout {
|
||||
|
||||
private int mScreenWidth;
|
||||
|
||||
public MyFrameLayout1(@NonNull Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public MyFrameLayout1(@NonNull Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public MyFrameLayout1(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
mScreenWidth = context.getResources().getDisplayMetrics().widthPixels;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
widthMeasureSpec = MeasureSpec.makeMeasureSpec(mScreenWidth, MeasureSpec.EXACTLY);
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import androidx.annotation.AttrRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/27.
|
||||
*/
|
||||
|
||||
public class MyFrameLayout2 extends FrameLayout {
|
||||
|
||||
private float mRatio;
|
||||
private float mOffestY;
|
||||
|
||||
public MyFrameLayout2(@NonNull Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public MyFrameLayout2(@NonNull Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public MyFrameLayout2(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyFrameLayout2);
|
||||
mRatio = ta.getFloat(R.styleable.MyFrameLayout2_mfl_ratio, 1);
|
||||
mOffestY = ta.getDimension(R.styleable.MyFrameLayout2_mfl_offestY, 0);
|
||||
ta.recycle();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
|
||||
heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) (widthSize * mRatio + mOffestY), MeasureSpec.EXACTLY);
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.RotateAnimation;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/11/21.
|
||||
*/
|
||||
|
||||
public class MyImageView2 extends AppCompatImageView {
|
||||
|
||||
private boolean mAnimating;
|
||||
private RotateAnimation mRotateAnimation;
|
||||
|
||||
|
||||
public MyImageView2(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public MyImageView2(Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public MyImageView2(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
mRotateAnimation = new RotateAnimation(-30f, 30f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.2f);
|
||||
mRotateAnimation.setDuration(300);
|
||||
mRotateAnimation.setRepeatCount(-1);
|
||||
mRotateAnimation.setRepeatMode(Animation.REVERSE);
|
||||
}
|
||||
|
||||
public void startAnim() {
|
||||
if (!mAnimating) {
|
||||
mAnimating = true;
|
||||
startAnimation(mRotateAnimation);
|
||||
}
|
||||
}
|
||||
|
||||
public void stopAnim() {
|
||||
if(mAnimating){
|
||||
mAnimating = false;
|
||||
clearAnimation();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/27.
|
||||
*/
|
||||
|
||||
public class MyLinearLayout1 extends LinearLayout {
|
||||
|
||||
private int mScreenWidth;
|
||||
|
||||
public MyLinearLayout1(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public MyLinearLayout1(Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public MyLinearLayout1(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
mScreenWidth = context.getResources().getDisplayMetrics().widthPixels;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
widthMeasureSpec = MeasureSpec.makeMeasureSpec(mScreenWidth * 2, MeasureSpec.EXACTLY);
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import androidx.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/25.
|
||||
*/
|
||||
|
||||
public class MyLinearLayout2 extends LinearLayout {
|
||||
|
||||
private float mScreenWidth;
|
||||
private int mSpanCount;
|
||||
|
||||
public MyLinearLayout2(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public MyLinearLayout2(Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public MyLinearLayout2(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
mScreenWidth = context.getResources().getDisplayMetrics().widthPixels;
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyLinearLayout2);
|
||||
mSpanCount = ta.getInteger(R.styleable.MyLinearLayout2_mll_span_count, 6);
|
||||
ta.recycle();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
widthMeasureSpec = MeasureSpec.makeMeasureSpec((int) (mScreenWidth / mSpanCount), MeasureSpec.EXACTLY);
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import androidx.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/12/3.
|
||||
*/
|
||||
|
||||
public class MyLinearLayout3 extends LinearLayout {
|
||||
|
||||
private int mScreenHeight;
|
||||
private float mHeightPercent;
|
||||
private int mHeight;
|
||||
|
||||
public MyLinearLayout3(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public MyLinearLayout3(Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public MyLinearLayout3(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
DisplayMetrics dm = context.getResources().getDisplayMetrics();
|
||||
mScreenHeight = dm.heightPixels;
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyLinearLayout3);
|
||||
mHeightPercent = ta.getFloat(R.styleable.MyLinearLayout3_mll_height_percent, 0);
|
||||
mHeight = (int) (mHeightPercent * mScreenHeight);
|
||||
ta.recycle();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
heightMeasureSpec = MeasureSpec.makeMeasureSpec(mHeight, MeasureSpec.EXACTLY);
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
|
||||
public int getHeight2() {
|
||||
return mHeight;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.yunbao.common.R;
|
||||
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/7/26.
|
||||
*/
|
||||
|
||||
public class MyLinearLayout4 extends LinearLayout {
|
||||
|
||||
private int mScreenWidth;
|
||||
private float mCount;
|
||||
|
||||
public MyLinearLayout4(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public MyLinearLayout4(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public MyLinearLayout4(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyLinearLayout4);
|
||||
mCount = ta.getFloat(R.styleable.MyLinearLayout4_mll4_count, 1);
|
||||
ta.recycle();
|
||||
init(context);
|
||||
}
|
||||
|
||||
private void init(Context context) {
|
||||
mScreenWidth = context.getResources().getDisplayMetrics().widthPixels;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
widthMeasureSpec = MeasureSpec.makeMeasureSpec((int) (mScreenWidth / mCount), MeasureSpec.EXACTLY);
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/7/26.
|
||||
*/
|
||||
|
||||
public class MyLinearLayout5 extends LinearLayout {
|
||||
|
||||
|
||||
public MyLinearLayout5(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public MyLinearLayout5(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public MyLinearLayout5(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
|
||||
super.onMeasure(MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.UNSPECIFIED), heightMeasureSpec);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.yunbao.common.custom;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.RadioButton;
|
||||
|
||||
/**
|
||||
* Created by cxf on 2018/9/28.
|
||||
*/
|
||||
|
||||
public class MyRadioButton extends RadioButton {
|
||||
|
||||
public MyRadioButton(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public MyRadioButton(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public MyRadioButton(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChecked(boolean checked) {
|
||||
//super.setChecked(checked);
|
||||
}
|
||||
|
||||
public void doChecked(boolean checked){
|
||||
super.setChecked(checked);
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user