Commit 4b6c74ff by Dell

改版

parent f526fc53
...@@ -6,7 +6,7 @@ def config = rootProject.ext.ver ...@@ -6,7 +6,7 @@ def config = rootProject.ext.ver
def library = rootProject.ext.library def library = rootProject.ext.library
def releaseTime() { def releaseTime() {
return new Date().format("yyyyMMdd", TimeZone.getDefault()) return new Date().format("yyyy-MM-dd", TimeZone.getDefault())
} }
android { android {
...@@ -42,7 +42,7 @@ android { ...@@ -42,7 +42,7 @@ android {
applicationVariants.all { variant -> applicationVariants.all { variant ->
variant.outputs.all { variant.outputs.all {
// outputFileName = "A_v${variant.versionName}_${variant.buildType.name}_id_0_250.apk" // outputFileName = "A_v${variant.versionName}_${variant.buildType.name}_id_0_250.apk"
outputFileName = "v${variant.versionName}_${variant.buildType.name}.apk" outputFileName = "v${variant.versionName}_${variant.buildType.name}_${releaseTime()}.apk"
} }
} }
...@@ -176,6 +176,8 @@ dependencies { ...@@ -176,6 +176,8 @@ dependencies {
//图片选择器 //图片选择器
implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'
implementation 'com.github.zhpanvip:bannerviewpager:3.5.4'
} }
repositories { repositories {
mavenCentral() mavenCentral()
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="com.hupu.tv.player.app.FileProvider" android:authorities="com.m.live.app.FileProvider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true"> android:grantUriPermissions="true">
<meta-data <meta-data
...@@ -72,11 +72,11 @@ ...@@ -72,11 +72,11 @@
<!-- 设置环信应用的AppKey --> <!-- 设置环信应用的AppKey -->
<meta-data <meta-data
android:name="EASEMOB_APPKEY" android:name="EASEMOB_APPKEY"
android:value="1118210302098649#hongshanliving" /> android:value="1102211214116810#room" />
<meta-data <meta-data
android:name="UMENG_APPKEY" android:name="UMENG_APPKEY"
android:value="606eca9818b72d2d244b25bb" /> android:value="61d3fba6e0f9bb492bb94a46" />
<meta-data <meta-data
android:name="UMENG_CHANNEL" android:name="UMENG_CHANNEL"
android:value="UMENG_CHANNEL" /> android:value="UMENG_CHANNEL" />
......
...@@ -20,7 +20,8 @@ interface HostUrl { ...@@ -20,7 +20,8 @@ interface HostUrl {
// const val HOST_URL = "http://129.226.169.250:8051/excuse/" // const val HOST_URL = "http://129.226.169.250:8051/excuse/"
const val HOST_URL = "http://hszhibo.live/excuse/" // const val HOST_URL = "http://hszhibo.live/excuse/"
const val HOST_URL = "http://api.mzhibo.cc/excuse/"
/** /**
...@@ -49,12 +50,12 @@ interface HostUrl { ...@@ -49,12 +50,12 @@ interface HostUrl {
/** /**
* 登接口 * 登接口
*/ */
const val POST_LOGIN = "capi/user/login" const val POST_LOGIN = "capi/user/login"
/** /**
* 登注册接口 * 登注册接口
*/ */
const val POST_LOGIN_LIVE = "user/register" const val POST_LOGIN_LIVE = "user/register"
...@@ -385,7 +386,7 @@ interface HostUrl { ...@@ -385,7 +386,7 @@ interface HostUrl {
const val POST_USER_FORGET_PASSWORD = "user/forgotPassword" const val POST_USER_FORGET_PASSWORD = "user/forgotPassword"
/** /**
* 设置登密码 * 设置登密码
*/ */
const val POST_USER_SETTING_PASSWORD = "user/userSetLoginPwd" const val POST_USER_SETTING_PASSWORD = "user/userSetLoginPwd"
...@@ -496,14 +497,14 @@ interface HostUrl { ...@@ -496,14 +497,14 @@ interface HostUrl {
/** /**
* 获取用户关注的主播列表 * 获取用户关注的主播列表
* 需要登可用 * 需要登可用
*/ */
const val POST_MATCH_USER_ANCHOR = "match/userGetAnchorList" const val POST_MATCH_USER_ANCHOR = "match/userGetAnchorList"
/** /**
* 获取用户关注的比赛列表 * 获取用户关注的比赛列表
* 需要登可用 * 需要登可用
*/ */
const val POST_MATCH_USER_MATCH = "match/userGetReserveMatch" const val POST_MATCH_USER_MATCH = "match/userGetReserveMatch"
......
...@@ -106,73 +106,73 @@ interface RetrofitService {/*@Field("is_new") int is_new*/ ...@@ -106,73 +106,73 @@ interface RetrofitService {/*@Field("is_new") int is_new*/
fun getWinnerListParam(@Body requestBody: RequestBody): Observable<BaseBean<List<String>>> fun getWinnerListParam(@Body requestBody: RequestBody): Observable<BaseBean<List<String>>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_LOGIN) @POST(HostUrl.POST_LOGIN)
fun login(@Body requestBody: RequestBody): Observable<BaseBean<UserBean>> fun login(@Body requestBody: RequestBody): Observable<BaseBean<UserBean>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_LOGIN_LIVE) @POST(HostUrl.POST_LOGIN_LIVE)
fun loginLive(@Body requestBody: RequestBody): Observable<BaseBean<String>> fun loginLive(@Body requestBody: RequestBody): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_LOGIN_PASSWORD) @POST(HostUrl.POST_LOGIN_PASSWORD)
fun loginPassword(@Body requestBody: RequestBody): Observable<BaseBean<String>> fun loginPassword(@Body requestBody: RequestBody): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_FEEDBACK) @POST(HostUrl.POST_FEEDBACK)
fun feedBack(@Body requestBody: RequestBody): Observable<BaseBean<String>> fun feedBack(@Body requestBody: RequestBody): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@FormUrlEncoded @FormUrlEncoded
@POST(HostUrl.POST_TEST) @POST(HostUrl.POST_TEST)
fun postTest(@Field("phone")phone:String,@Field("password")password:String): Observable<BaseBean<String>> fun postTest(@Field("phone")phone:String,@Field("password")password:String): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_FEEDBACK_LIST) @POST(HostUrl.POST_FEEDBACK_LIST)
fun getFeedBackList(): Observable<BaseBean<String>> fun getFeedBackList(): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_FEEDBACK_TYPE) @POST(HostUrl.POST_FEEDBACK_TYPE)
fun getFeedBackTypeList(): Observable<BaseBean<String>> fun getFeedBackTypeList(): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_USER_CODE) @POST(HostUrl.POST_USER_CODE)
fun getSmsCode(@Body requestBody: RequestBody): Observable<BaseBean<String>> fun getSmsCode(@Body requestBody: RequestBody): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_USER_FORGET_PASSWORD) @POST(HostUrl.POST_USER_FORGET_PASSWORD)
fun forgetPassword(@Body requestBody: RequestBody): Observable<BaseBean<String>> fun forgetPassword(@Body requestBody: RequestBody): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_USER_SETTING_PASSWORD) @POST(HostUrl.POST_USER_SETTING_PASSWORD)
fun settingPassword(@Body requestBody: RequestBody): Observable<BaseBean<String>> fun settingPassword(@Body requestBody: RequestBody): Observable<BaseBean<String>>
/** /**
* 登接口 * 登接口
*/ */
@POST(HostUrl.POST_VERIFICATION_SMS_CODE) @POST(HostUrl.POST_VERIFICATION_SMS_CODE)
fun verficationSmsCode(@Body requestBody: RequestBody): Observable<BaseBean<String>> fun verficationSmsCode(@Body requestBody: RequestBody): Observable<BaseBean<String>>
...@@ -692,8 +692,8 @@ interface RetrofitService {/*@Field("is_new") int is_new*/ ...@@ -692,8 +692,8 @@ interface RetrofitService {/*@Field("is_new") int is_new*/
/** /**
* 获取新闻头部List * 获取新闻头部List
*/ */
@GET(HostUrl.POST_HEAD_NEWS) @POST(HostUrl.POST_LIVE_BANNER)
fun getNewsHeadList(): Observable<BaseBean<List<NewsHeadEntity>>> fun getNewsHeadList(@Body requestBody: RequestBody): Observable<BaseBean<List<BannerBean>>>
/** /**
* 退出登录 * 退出登录
......
...@@ -105,7 +105,7 @@ class App : BaseApplication() { ...@@ -105,7 +105,7 @@ class App : BaseApplication() {
private fun initUmeng() { private fun initUmeng() {
UMConfigure.init( UMConfigure.init(
instance, instance,
"606eca9818b72d2d244b25bb", "61d3fba6e0f9bb492bb94a46",
BuildConfig.CHANNEL_ID.toString(), BuildConfig.CHANNEL_ID.toString(),
UMConfigure.DEVICE_TYPE_PHONE, UMConfigure.DEVICE_TYPE_PHONE,
"" ""
......
...@@ -25,6 +25,7 @@ import com.softgarden.baselibrary.widget.GridDividerDecoration ...@@ -25,6 +25,7 @@ import com.softgarden.baselibrary.widget.GridDividerDecoration
import com.hupu.tv.player.app.R import com.hupu.tv.player.app.R
import com.hupu.tv.player.app.app.Constants import com.hupu.tv.player.app.app.Constants
import com.hupu.tv.player.app.ui.activity.LoginActivity import com.hupu.tv.player.app.ui.activity.LoginActivity
import com.hupu.tv.player.app.utils.CommonUtils
import com.hupu.tv.player.app.utils.EmptyConfig import com.hupu.tv.player.app.utils.EmptyConfig
import com.softgarden.baselibrary.utils.ActivityManager import com.softgarden.baselibrary.utils.ActivityManager
import com.softgarden.baselibrary.utils.ScreenUtil import com.softgarden.baselibrary.utils.ScreenUtil
...@@ -304,7 +305,8 @@ abstract class RefreshActivity<P : IBasePresenter?> : ToolbarActivity<P>(), Requ ...@@ -304,7 +305,8 @@ abstract class RefreshActivity<P : IBasePresenter?> : ToolbarActivity<P>(), Requ
override fun onApiException(t: ApiException) { override fun onApiException(t: ApiException) {
super.onApiException(t) super.onApiException(t)
if (t.message == Constants.ERROR_TOKEN) { if (t.message == Constants.ERROR_TOKEN) {
ActivityManager.instance.finishAll() // ActivityManager.instance.finishAll()
CommonUtils.exitLogOut()
val intent = Intent(this, LoginActivity::class.java) val intent = Intent(this, LoginActivity::class.java)
intent.putExtra(Constants.ERROR_TOKEN, true) intent.putExtra(Constants.ERROR_TOKEN, true)
startActivity(intent) startActivity(intent)
......
...@@ -27,10 +27,7 @@ import com.hupu.tv.player.app.app.Constants ...@@ -27,10 +27,7 @@ import com.hupu.tv.player.app.app.Constants
import com.hupu.tv.player.app.base.RefreshActivity import com.hupu.tv.player.app.base.RefreshActivity
import com.hupu.tv.player.app.bean.GiftBean import com.hupu.tv.player.app.bean.GiftBean
import com.hupu.tv.player.app.bean.RoomInfoBean import com.hupu.tv.player.app.bean.RoomInfoBean
import com.hupu.tv.player.app.event.FollowAnchorEvent import com.hupu.tv.player.app.event.*
import com.hupu.tv.player.app.event.GiftEvent
import com.hupu.tv.player.app.event.MessageEvent
import com.hupu.tv.player.app.event.ReportEvent
import com.hupu.tv.player.app.ui.contact.LiveActivityContact import com.hupu.tv.player.app.ui.contact.LiveActivityContact
import com.hupu.tv.player.app.ui.fragment.* import com.hupu.tv.player.app.ui.fragment.*
import com.hupu.tv.player.app.ui.presenter.LiveActivityPresenter import com.hupu.tv.player.app.ui.presenter.LiveActivityPresenter
...@@ -212,7 +209,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -212,7 +209,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
EMClient.getInstance().login(userName, "123456", object : EMCallBack { EMClient.getInstance().login(userName, "123456", object : EMCallBack {
override fun onSuccess() { override fun onSuccess() {
runOnUiThread { runOnUiThread {
addMessage("环信登成功") addMessage("环信登成功")
initTabLayout() initTabLayout()
} }
} }
...@@ -225,7 +222,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -225,7 +222,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
if (code == 200) { if (code == 200) {
initTabLayout() initTabLayout()
} else { } else {
addMessage("环信登失败:code : $code error : $error") addMessage("环信登失败:code : $code error : $error")
if (code == 204) { if (code == 204) {
CommonUtils.copy(userName) CommonUtils.copy(userName)
addMessage("用户id已经复制到剪切板,请粘贴发送于我,后台注册用户") addMessage("用户id已经复制到剪切板,请粘贴发送于我,后台注册用户")
...@@ -245,7 +242,12 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -245,7 +242,12 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
mFragment.add(LiveRankFragment.newInstance(roomId)) mFragment.add(LiveRankFragment.newInstance(roomId))
mFragment.add(LiveRedListFragment.newInstance(matchId)) mFragment.add(LiveRedListFragment.newInstance(matchId))
// mFragment.add(LiveMatchFragment.newInstance(roomId)) // mFragment.add(LiveMatchFragment.newInstance(roomId))
val mTitles: Array<String?> = arrayOf(getString(R.string.string_live_conversation), getString(R.string.string_live_actor), getString(R.string.string_live_rank), getString(R.string.string_live_red_list)) val mTitles: Array<String?> = arrayOf(
getString(R.string.string_live_conversation),
getString(R.string.string_live_actor),
getString(R.string.string_live_rank),
getString(R.string.string_live_red_list)
)
val mAdapter = FragmentBaseStatePagerAdapter(supportFragmentManager, mFragment, mTitles) val mAdapter = FragmentBaseStatePagerAdapter(supportFragmentManager, mFragment, mTitles)
vp_live.adapter = mAdapter vp_live.adapter = mAdapter
vp_live.offscreenPageLimit = mFragment.size vp_live.offscreenPageLimit = mFragment.size
...@@ -265,7 +267,11 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -265,7 +267,11 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
mFragment.add(LiveAnchorFragment.newInstance(roomId)) mFragment.add(LiveAnchorFragment.newInstance(roomId))
mFragment.add(LiveRankFragment.newInstance(roomId)) mFragment.add(LiveRankFragment.newInstance(roomId))
mFragment.add(LiveMatchFragment.newInstance(roomId)) mFragment.add(LiveMatchFragment.newInstance(roomId))
val mTitles: Array<String?> = arrayOf(getString(R.string.string_live_actor), getString(R.string.string_live_rank), getString(R.string.string_live_match)) val mTitles: Array<String?> = arrayOf(
getString(R.string.string_live_actor),
getString(R.string.string_live_rank),
getString(R.string.string_live_match)
)
val mAdapter = FragmentBaseStatePagerAdapter(supportFragmentManager, mFragment, mTitles) val mAdapter = FragmentBaseStatePagerAdapter(supportFragmentManager, mFragment, mTitles)
vp_live.adapter = mAdapter vp_live.adapter = mAdapter
vp_live.offscreenPageLimit = mFragment.size vp_live.offscreenPageLimit = mFragment.size
...@@ -285,7 +291,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -285,7 +291,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
override fun onRequestRoomInfo(bean: RoomInfoBean?) { override fun onRequestRoomInfo(bean: RoomInfoBean?) {
matchId = bean?.matchId?:"" matchId = bean?.matchId ?: ""
addMessage("请求房间信息成功 直播间 IM userId = ${bean?.huanXinUserId}") addMessage("请求房间信息成功 直播间 IM userId = ${bean?.huanXinUserId}")
bean?.let { bean?.let {
roomId = it.roomId roomId = it.roomId
...@@ -327,7 +333,10 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -327,7 +333,10 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
if (TextUtils.isEmpty(qqNum)) { if (TextUtils.isEmpty(qqNum)) {
CommonUtils.copy(it.qqNum, getString(R.string.string_live_copy_success_qq)) CommonUtils.copy(it.qqNum, getString(R.string.string_live_copy_success_qq))
} else if (TextUtils.isEmpty(qqGroupNum)) { } else if (TextUtils.isEmpty(qqGroupNum)) {
CommonUtils.copy(it.qqGroupNum, getString(R.string.string_live_copy_success_qq_group)) CommonUtils.copy(
it.qqGroupNum,
getString(R.string.string_live_copy_success_qq_group)
)
} }
} }
} }
...@@ -373,6 +382,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -373,6 +382,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
fun onEventDamMu(event: MessageEvent) { fun onEventDamMu(event: MessageEvent) {
sendDanmu(event.message, false) sendDanmu(event.message, false)
} }
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true, priority = 1) @Subscribe(threadMode = ThreadMode.MAIN, sticky = true, priority = 1)
fun onReport(event: ReportEvent) { fun onReport(event: ReportEvent) {
startActivity(Intent(this, ReportActivity::class.java)) startActivity(Intent(this, ReportActivity::class.java))
...@@ -384,6 +394,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta ...@@ -384,6 +394,7 @@ class LiveActivity : RefreshActivity<LiveActivityPresenter>(), LiveActivityConta
} }
override fun onBackPressed() { override fun onBackPressed() {
orientationUtils?.backToProtVideo() orientationUtils?.backToProtVideo()
if (GSYVideoManager.backFromWindowFull(this)) { if (GSYVideoManager.backFromWindowFull(this)) {
......
...@@ -43,7 +43,7 @@ class LoginActivity : RefreshActivity<LoginActivityPresenter>(), LoginActivityCo ...@@ -43,7 +43,7 @@ class LoginActivity : RefreshActivity<LoginActivityPresenter>(), LoginActivityCo
intent.getBooleanExtra(Constants.FORCE_EXIT, false) intent.getBooleanExtra(Constants.FORCE_EXIT, false)
WaitDialog.dismiss() WaitDialog.dismiss()
CommonUtils.umengLogin() CommonUtils.umengLogin()
startActivity(MainActivity::class.java) // startActivity(MainActivity::class.java)
finish() finish()
} }
......
...@@ -97,13 +97,13 @@ class NewMatchDetailActivity : RefreshActivity<NewMatchDetailPresenter>(), NewMa ...@@ -97,13 +97,13 @@ class NewMatchDetailActivity : RefreshActivity<NewMatchDetailPresenter>(), NewMa
1 -> { 1 -> {
tv_status.background = getDrawable(R.drawable.shape_match_status_live) tv_status.background = getDrawable(R.drawable.shape_match_status_live)
tv_status.text = "直播中" tv_status.text = "直播中"
tv_status.setOnClickListener { // tv_status.setOnClickListener {
DialogUtils.showMatchLive(this, liveBeanList, object : DialogUtils.OnClickTextListener { // DialogUtils.showMatchLive(this, liveBeanList, object : DialogUtils.OnClickTextListener {
override fun onClick(text: String) { // override fun onClick(text: String) {
startActivity(CommonUtils.toWeb(text)) // startActivity(CommonUtils.toWeb(text))
} // }
}) // })
} // }
} }
3 -> { 3 -> {
tv_status.background = getDrawable(R.drawable.shape_match_status_end) tv_status.background = getDrawable(R.drawable.shape_match_status_end)
......
...@@ -27,7 +27,8 @@ import com.softgarden.baselibrary.utils.RecyclerViewUtil ...@@ -27,7 +27,8 @@ import com.softgarden.baselibrary.utils.RecyclerViewUtil
import com.softgarden.baselibrary.utils.SPUtil import com.softgarden.baselibrary.utils.SPUtil
import com.softgarden.baselibrary.utils.ToastUtil import com.softgarden.baselibrary.utils.ToastUtil
import kotlinx.android.synthetic.main.activity_news_detail.* import kotlinx.android.synthetic.main.activity_news_detail.*
import kotlinx.android.synthetic.main.layout_title.* import java.util.regex.Matcher
import java.util.regex.Pattern
class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailContact.Display { class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailContact.Display {
...@@ -47,8 +48,6 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon ...@@ -47,8 +48,6 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon
override fun initialize() { override fun initialize() {
id = intent.getStringExtra(Constants.NEWS_DETAIL) ?: "" id = intent.getStringExtra(Constants.NEWS_DETAIL) ?: ""
tv_title_middle.text = "新闻详情"
tv_title_middle.setTextColor(resources.getColor(R.color.black))
iv_left_icon.setOnClickListener { iv_left_icon.setOnClickListener {
finish() finish()
...@@ -114,7 +113,6 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon ...@@ -114,7 +113,6 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon
fun initWebView() { fun initWebView() {
// mWebView.setBackgroundColor(ContextCompat.getColor(this, R.color.colorTheme)); // 设置背景色 // mWebView.setBackgroundColor(ContextCompat.getColor(this, R.color.colorTheme)); // 设置背景色
val webSettings = mWebView.settings val webSettings = mWebView.settings
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings.javaScriptEnabled = true webSettings.javaScriptEnabled = true
//支持插件 //支持插件
...@@ -245,12 +243,14 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon ...@@ -245,12 +243,14 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon
fun loadText(content: String?) { fun loadText(content: String?) {
val webSettings = mWebView.settings val webSettings = mWebView.settings
//设置自适应屏幕,两者合用 //设置自适应屏幕,两者合用
val data = replaceImg(content ?: "") val data = cancelStyle(content ?: "")
val cancelLink = cancelLink(data)
val cancelHead = cancelHead(cancelLink)
webSettings?.useWideViewPort = false //将图片调整到适合webview的大小 webSettings?.useWideViewPort = false //将图片调整到适合webview的大小
webSettings?.loadWithOverviewMode = false // 缩放至屏幕的大小 webSettings?.loadWithOverviewMode = false // 缩放至屏幕的大小
/*** 完美自适应屏幕 */ /*** 完美自适应屏幕 */
val sb = StringBuilder() val sb = StringBuilder()
sb.append(data) sb.append(cancelHead)
.append("<html>") .append("<html>")
.append("<head>") .append("<head>")
.append("<meta charset=\\\"utf-8\\\">") .append("<meta charset=\\\"utf-8\\\">")
...@@ -261,7 +261,7 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon ...@@ -261,7 +261,7 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon
.append("<style>img{width:100%;}</style>") .append("<style>img{width:100%;}</style>")
.append("<style>iframe{width:100%;}</style>") .append("<style>iframe{width:100%;}</style>")
.append("<style>table{width:100%;}</style>") .append("<style>table{width:100%;}</style>")
.append("<style>body{font-size:18px;}</style>") .append("<style>body{font-size:14px;color:#666666}</style>")
.append("<title>mWebView</title>") .append("<title>mWebView</title>")
mWebView.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null) mWebView.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null)
...@@ -280,6 +280,43 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon ...@@ -280,6 +280,43 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon
return temp return temp
} }
private fun cancelStyle(text:String):String{
var content = text
// 先把所有的style干掉 - 正则表达式
val regEx = " style=\"(.*?)\""
val p: Pattern = Pattern.compile(regEx)
val m: Matcher = p.matcher(text)
if (m.find()) {
content = m.replaceAll("")
}
return content;
}
private fun cancelLink(text: String):String{
var content = text
// 先把所有的style干掉 - 正则表达式
val regEx = " href=\"(.*?)\""
val p: Pattern = Pattern.compile(regEx)
val m: Matcher = p.matcher(text)
if (m.find()) {
content = m.replaceAll("")
}
return content;
}
private fun cancelHead(text: String):String{
var content = text
// 去掉head
val regEx = ".*[h]1>"
val p: Pattern = Pattern.compile(regEx)
val m: Matcher = p.matcher(text)
if (m.find()) {
content = m.replaceAll("")
}
return content
}
override fun onDetail(entity: NewDetailEntity?) { override fun onDetail(entity: NewDetailEntity?) {
loadText(entity?.content) loadText(entity?.content)
...@@ -301,6 +338,8 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon ...@@ -301,6 +338,8 @@ class NewsDetailActivity : ToolbarActivity<NewsDetailPresenter>(), NewsDetailCon
} }
} }
tv_like_count.text = entity?.likeCount.toString() tv_like_count.text = entity?.likeCount.toString()
tv_title.text = entity?.title
tv_time.text = entity?.releaseTime
moreAdapter.setNewData(entity?.associateArticle) moreAdapter.setNewData(entity?.associateArticle)
} }
......
...@@ -46,7 +46,7 @@ class NickNameActivity : RefreshActivity<NickNameActivityPresenter>(), NickNameA ...@@ -46,7 +46,7 @@ class NickNameActivity : RefreshActivity<NickNameActivityPresenter>(), NickNameA
CommonUtils.umengLogin() CommonUtils.umengLogin()
WaitDialog.dismiss() WaitDialog.dismiss()
hideProgressDialog() hideProgressDialog()
ToastUtil.s("登成功") ToastUtil.s("登成功")
startActivity(MainActivity::class.java) startActivity(MainActivity::class.java)
finish() finish()
} }
......
...@@ -149,7 +149,7 @@ class SettingActivity : RefreshActivity<SettingPresenter>(), SettingContact.Disp ...@@ -149,7 +149,7 @@ class SettingActivity : RefreshActivity<SettingPresenter>(), SettingContact.Disp
override fun onExit() { override fun onExit() {
ToastUtil.s("退出成功") ToastUtil.s("退出成功")
startActivity(LoginActivity::class.java) startActivity(LoginActivity::class.java)
ActivityManager.instance.finishAll() // ActivityManager.instance.finishAll()
// EventBus.getDefault().post(ExitLoginEvent()) // EventBus.getDefault().post(ExitLoginEvent())
} }
......
package com.hupu.tv.player.app.ui.adapter
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import com.hupu.tv.player.app.R
import com.hupu.tv.player.app.bean.BannerBean
import com.hupu.tv.player.app.utils.GlideUtils
import com.zhpan.bannerview.BaseBannerAdapter
import com.zhpan.bannerview.BaseViewHolder
class HomeBannerAdapter(private val isNews: Boolean = false) : BaseBannerAdapter<BannerBean?>() {
override fun bindData(
holder: BaseViewHolder<BannerBean?>,
data: BannerBean?,
position: Int,
pageSize: Int
) {
holder.itemView.findViewById<ImageView>(R.id.banner_image).apply {
GlideUtils.loadImage(holder.itemView, data?.picPath, this,0)
if (isNews) {
holder.itemView.findViewById<TextView>(R.id.tv_title).apply {
visibility = View.VISIBLE
text = data?.title
}
}
}
}
override fun getLayoutId(viewType: Int): Int {
return R.layout.item_slide_mode
}
}
\ No newline at end of file
...@@ -73,7 +73,7 @@ public class ImagesPagerAdapter extends PagerAdapter { ...@@ -73,7 +73,7 @@ public class ImagesPagerAdapter extends PagerAdapter {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
imageView.setLayoutParams(lp); imageView.setLayoutParams(lp);
// GlideUtils.loadRoundCircleImageCenterCrop(mFragment, (String) SPUtil.Companion.get(Constants.SITE,"")+url, imageView, 9); // GlideUtils.loadRoundCircleImageCenterCrop(mFragment, (String) SPUtil.Companion.get(Constants.SITE,"")+url, imageView, 9);
GlideUtils.loadRoundCircleImageCenterCrop(mFragment, url, imageView, 8, R.mipmap.bg_live_main_place_holder); GlideUtils.loadRoundCircleImageCenterCrop(mFragment, url, imageView, 8, 0);
viewPager.addView(imageView); viewPager.addView(imageView);
imageView.setOnClickListener(v -> { imageView.setOnClickListener(v -> {
if (onItemClickListener!=null){ if (onItemClickListener!=null){
......
...@@ -71,16 +71,21 @@ class MatchContentIncludeAdapter(layoutResId: Int, private val baseFragment: Bas ...@@ -71,16 +71,21 @@ class MatchContentIncludeAdapter(layoutResId: Int, private val baseFragment: Bas
// }); // });
guidesAdapter.onItemClickListener = OnItemClickListener { adapter: BaseQuickAdapter<*, *>, view: View?, position: Int -> guidesAdapter.onItemClickListener = OnItemClickListener { adapter: BaseQuickAdapter<*, *>, view: View?, position: Int ->
if (SPUtil[Constants.USER_LOGIN, false] as Boolean) {
val guidesBean = adapter.getItem(position) as GuidesBean? val guidesBean = adapter.getItem(position) as GuidesBean?
val intent = Intent(baseFragment.activity, LiveActivity::class.java) val intent = Intent(baseFragment.activity, LiveActivity::class.java)
intent.putExtra(Constants.ROOM_ID, guidesBean!!.roomId) intent.putExtra(Constants.ROOM_ID, guidesBean!!.roomId)
intent.putExtra(Constants.ROOM_COVER, guidesBean.matchCutImg) intent.putExtra(Constants.ROOM_COVER, guidesBean.matchCutImg)
baseFragment.startActivity(intent) baseFragment.startActivity(intent)
} else { // if (SPUtil[Constants.USER_LOGIN, false] as Boolean) {
DialogUtils.showLogin(mContext as AppCompatActivity) // val guidesBean = adapter.getItem(position) as GuidesBean?
// startActivity(LoginActivity::class.java) // val intent = Intent(baseFragment.activity, LiveActivity::class.java)
} // intent.putExtra(Constants.ROOM_ID, guidesBean!!.roomId)
// intent.putExtra(Constants.ROOM_COVER, guidesBean.matchCutImg)
// baseFragment.startActivity(intent)
// } else {
// DialogUtils.showLogin(mContext as AppCompatActivity)
//// startActivity(LoginActivity::class.java)
// }
} }
......
...@@ -18,7 +18,6 @@ import com.hupu.tv.player.app.widget.ImageCarousel ...@@ -18,7 +18,6 @@ import com.hupu.tv.player.app.widget.ImageCarousel
*/ */
interface MainContentAllContract { interface MainContentAllContract {
interface Display : IBaseDisplay { interface Display : IBaseDisplay {
fun onDot(imageCarousel: ImageCarousel)
fun onRequestLiveData(data:List<LiveBean.DataListBean>?) fun onRequestLiveData(data:List<LiveBean.DataListBean>?)
fun onTopLiveData(data:List<MatchContentBean.MatchListsBean.MatchInfosBean>?) fun onTopLiveData(data:List<MatchContentBean.MatchListsBean.MatchInfosBean>?)
fun onSubscribeMatch(message:String) fun onSubscribeMatch(message:String)
...@@ -26,7 +25,6 @@ interface MainContentAllContract { ...@@ -26,7 +25,6 @@ interface MainContentAllContract {
} }
interface Presenter { interface Presenter {
fun initDot(linearLayout: LinearLayout, viewPager: ViewPager, textView: TextView)
fun getMatchData(pageNo:Int) fun getMatchData(pageNo:Int)
fun getTopLive(pageNo: Int) fun getTopLive(pageNo: Int)
fun reserveMatch(id: String) fun reserveMatch(id: String)
......
...@@ -16,13 +16,11 @@ import com.hupu.tv.player.app.widget.ImageCarousel ...@@ -16,13 +16,11 @@ import com.hupu.tv.player.app.widget.ImageCarousel
interface MainNewsContentAllContract { interface MainNewsContentAllContract {
interface Display : IBaseDisplay { interface Display : IBaseDisplay {
fun onNewsData(data: NewsDataBean?) fun onNewsData(data: NewsDataBean?)
fun onDot(imageCarousel: ImageCarousel)
fun onRequestLiveData(data:List<LiveBean.DataListBean>?) fun onRequestLiveData(data:List<LiveBean.DataListBean>?)
} }
interface Presenter { interface Presenter {
fun initDot(linearLayout: LinearLayout, viewPager: ViewPager, textView: TextView)
fun getNewsList(id:String,pageNo:Int) fun getNewsList(id:String,pageNo:Int)
} }
......
...@@ -14,6 +14,8 @@ import com.hupu.tv.player.app.bean.RoomInfoBean ...@@ -14,6 +14,8 @@ import com.hupu.tv.player.app.bean.RoomInfoBean
import com.hupu.tv.player.app.ui.adapter.MainPlayerAdapter import com.hupu.tv.player.app.ui.adapter.MainPlayerAdapter
import com.hupu.tv.player.app.ui.contact.BasketBallPlayerFragmentContact import com.hupu.tv.player.app.ui.contact.BasketBallPlayerFragmentContact
import com.hupu.tv.player.app.ui.presenter.BasketBallPlayerFragmentPresenter import com.hupu.tv.player.app.ui.presenter.BasketBallPlayerFragmentPresenter
import com.softgarden.baselibrary.base.IBaseDisplay
import com.softgarden.baselibrary.base.IBasePresenter
import kotlinx.android.synthetic.main.fragment_match_player.* import kotlinx.android.synthetic.main.fragment_match_player.*
import kotlinx.android.synthetic.main.layout_empty.* import kotlinx.android.synthetic.main.layout_empty.*
...@@ -23,7 +25,7 @@ import kotlinx.android.synthetic.main.layout_empty.* ...@@ -23,7 +25,7 @@ import kotlinx.android.synthetic.main.layout_empty.*
* @date on 2020/6/15 * @date on 2020/6/15
* @describe * @describe
*/ */
class BasketBallPlayerFragment : RefreshFragment<BasketBallPlayerFragmentPresenter>(), BasketBallPlayerFragmentContact.Display { class BasketBallPlayerFragment : RefreshFragment<IBasePresenter>(), IBaseDisplay {
private var roomid = "" private var roomid = ""
private lateinit var adapter: MainPlayerAdapter private lateinit var adapter: MainPlayerAdapter
private lateinit var awayAdapter: MainPlayerAdapter private lateinit var awayAdapter: MainPlayerAdapter
...@@ -36,9 +38,9 @@ class BasketBallPlayerFragment : RefreshFragment<BasketBallPlayerFragmentPresent ...@@ -36,9 +38,9 @@ class BasketBallPlayerFragment : RefreshFragment<BasketBallPlayerFragmentPresent
override val baseActivity: BaseActivity<*>? override val baseActivity: BaseActivity<*>?
get() = activity as BaseActivity<*> get() = activity as BaseActivity<*>
override fun onRequestRoomInfo(bean: RoomInfoBean?) { // override fun onRequestRoomInfo(bean: RoomInfoBean?) {
//
} // }
override val ctx: Context? override val ctx: Context?
...@@ -108,7 +110,7 @@ class BasketBallPlayerFragment : RefreshFragment<BasketBallPlayerFragmentPresent ...@@ -108,7 +110,7 @@ class BasketBallPlayerFragment : RefreshFragment<BasketBallPlayerFragmentPresent
override fun lazyLoad() { override fun lazyLoad() {
presenter?.getRoomInfo(roomid) // presenter?.getRoomInfo(roomid)
// presenter?.getBaseketballInfo(roomid) // presenter?.getBaseketballInfo(roomid)
mRecyclerView?.postDelayed({ mRecyclerView?.postDelayed({
finishRefresh() finishRefresh()
......
...@@ -16,6 +16,8 @@ import com.hupu.tv.player.app.ui.adapter.MatchTeamTopAdapter ...@@ -16,6 +16,8 @@ import com.hupu.tv.player.app.ui.adapter.MatchTeamTopAdapter
import com.hupu.tv.player.app.ui.contact.BasketBallTeamFragmentContact import com.hupu.tv.player.app.ui.contact.BasketBallTeamFragmentContact
import com.hupu.tv.player.app.ui.presenter.BasketBallTeamFragmentPresenter import com.hupu.tv.player.app.ui.presenter.BasketBallTeamFragmentPresenter
import com.hupu.tv.player.app.utils.GlideUtils import com.hupu.tv.player.app.utils.GlideUtils
import com.softgarden.baselibrary.base.IBaseDisplay
import com.softgarden.baselibrary.base.IBasePresenter
import kotlinx.android.synthetic.main.fragment_team_new.* import kotlinx.android.synthetic.main.fragment_team_new.*
import kotlinx.android.synthetic.main.layout_empty.* import kotlinx.android.synthetic.main.layout_empty.*
...@@ -25,7 +27,7 @@ import kotlinx.android.synthetic.main.layout_empty.* ...@@ -25,7 +27,7 @@ import kotlinx.android.synthetic.main.layout_empty.*
* @date on 2020/6/15 * @date on 2020/6/15
* @describe * @describe
*/ */
class BasketBallTeamFragment : RefreshFragment<BasketBallTeamFragmentPresenter>(), BasketBallTeamFragmentContact.Display { class BasketBallTeamFragment : RefreshFragment<IBasePresenter>(),IBaseDisplay {
/** /**
* 因为两个View叠加在一起,没办法使用LinearLayout 的weight,所以要通过得分来计算 * 因为两个View叠加在一起,没办法使用LinearLayout 的weight,所以要通过得分来计算
* 因为最大长度为200 * 因为最大长度为200
...@@ -60,10 +62,10 @@ class BasketBallTeamFragment : RefreshFragment<BasketBallTeamFragmentPresenter>( ...@@ -60,10 +62,10 @@ class BasketBallTeamFragment : RefreshFragment<BasketBallTeamFragmentPresenter>(
override val baseActivity: BaseActivity<*>? override val baseActivity: BaseActivity<*>?
get() = activity as BaseActivity<*> get() = activity as BaseActivity<*>
//
override fun onRequestRoomInfo(bean: RoomInfoBean?) { // override fun onRequestRoomInfo(bean: RoomInfoBean?) {
//
} // }
override val ctx: Context? override val ctx: Context?
...@@ -170,7 +172,7 @@ class BasketBallTeamFragment : RefreshFragment<BasketBallTeamFragmentPresenter>( ...@@ -170,7 +172,7 @@ class BasketBallTeamFragment : RefreshFragment<BasketBallTeamFragmentPresenter>(
override fun lazyLoad() { override fun lazyLoad() {
presenter?.getRoomInfo(roomid) // presenter?.getRoomInfo(roomid)
mRecyclerView?.postDelayed({ mRecyclerView?.postDelayed({
finishRefresh() finishRefresh()
}, 3000) }, 3000)
......
...@@ -127,11 +127,13 @@ public class ChatFragment extends CustomEaseChatFragment implements OnRecallMess ...@@ -127,11 +127,13 @@ public class ChatFragment extends CustomEaseChatFragment implements OnRecallMess
public void sendJoinRoomData() { public void sendJoinRoomData() {
if (!isSend) { if (!isSend) {
boolean isLogin = (boolean) SPUtil.Companion.get(Constants.USER_LOGIN, false);
if (isLogin) {
chatLayout.sendTextMessage("进入直播间"); chatLayout.sendTextMessage("进入直播间");
sendFakeMessage(); sendFakeMessage();
isSend = true; isSend = true;
} }
}
} }
private void sendFakeMessage() { private void sendFakeMessage() {
......
...@@ -69,7 +69,7 @@ class FollowAnchorFragment : ToolbarFragment<FollowAnchorPresenter>(), FollowAnc ...@@ -69,7 +69,7 @@ class FollowAnchorFragment : ToolbarFragment<FollowAnchorPresenter>(), FollowAnc
ll_not_login.visibility = View.VISIBLE ll_not_login.visibility = View.VISIBLE
mRecyclerView?.visibility = View.GONE mRecyclerView?.visibility = View.GONE
} }
iv_login.setOnClickListener { tv_login.setOnClickListener {
DialogUtils.showLogin(activity as AppCompatActivity) DialogUtils.showLogin(activity as AppCompatActivity)
} }
} }
...@@ -90,10 +90,10 @@ class FollowAnchorFragment : ToolbarFragment<FollowAnchorPresenter>(), FollowAnc ...@@ -90,10 +90,10 @@ class FollowAnchorFragment : ToolbarFragment<FollowAnchorPresenter>(), FollowAnc
activity?.let { RecyclerViewUtil.addGridItemDecoration(it, mRecyclerView_down!!, R.color.transparent, 2 * Constants.item_divider) } activity?.let { RecyclerViewUtil.addGridItemDecoration(it, mRecyclerView_down!!, R.color.transparent, 2 * Constants.item_divider) }
mRecyclerView_down?.adapter = liveItemAdapter mRecyclerView_down?.adapter = liveItemAdapter
liveItemAdapter?.setOnItemClickListener { adapter, view, position -> liveItemAdapter?.setOnItemClickListener { adapter, view, position ->
if (!(SPUtil[Constants.USER_LOGIN, false] as Boolean)) { // if (!(SPUtil[Constants.USER_LOGIN, false] as Boolean)) {
DialogUtils.showLogin(requireActivity() as AppCompatActivity) // DialogUtils.showLogin(requireActivity() as AppCompatActivity)
return@setOnItemClickListener // return@setOnItemClickListener
} // }
val item: LiveBean.DataListBean = adapter.getItem(position) as LiveBean.DataListBean val item: LiveBean.DataListBean = adapter.getItem(position) as LiveBean.DataListBean
val intent = Intent(activity, LiveActivity::class.java) val intent = Intent(activity, LiveActivity::class.java)
......
...@@ -63,7 +63,7 @@ class FollowMatchFragment : ToolbarFragment<FollowMatchPresenter>(), FollowMatch ...@@ -63,7 +63,7 @@ class FollowMatchFragment : ToolbarFragment<FollowMatchPresenter>(), FollowMatch
ll_not_login.visibility = View.VISIBLE ll_not_login.visibility = View.VISIBLE
ll_data.visibility = View.GONE ll_data.visibility = View.GONE
} }
iv_login.setOnClickListener { tv_login.setOnClickListener {
DialogUtils.showLogin(activity as AppCompatActivity) DialogUtils.showLogin(activity as AppCompatActivity)
} }
} }
......
...@@ -85,6 +85,7 @@ class LiveConversationFragment : RefreshFragment<LiveConversationFragmentPresent ...@@ -85,6 +85,7 @@ class LiveConversationFragment : RefreshFragment<LiveConversationFragmentPresent
fun onEventRefresh(event: RefreshUserEvent) { fun onEventRefresh(event: RefreshUserEvent) {
needLogin() needLogin()
chatFragment?.setShowChatPrimaryMenu() chatFragment?.setShowChatPrimaryMenu()
chatFragment?.sendJoinRoomData()
} }
fun sendDanmu(text: String, isMine: Boolean) { fun sendDanmu(text: String, isMine: Boolean) {
......
...@@ -24,6 +24,7 @@ import com.hupu.tv.player.app.event.VisibleEvent ...@@ -24,6 +24,7 @@ import com.hupu.tv.player.app.event.VisibleEvent
import com.hupu.tv.player.app.ui.activity.LiveActivity import com.hupu.tv.player.app.ui.activity.LiveActivity
import com.hupu.tv.player.app.ui.activity.MatchDetailActivity import com.hupu.tv.player.app.ui.activity.MatchDetailActivity
import com.hupu.tv.player.app.ui.activity.NewMatchDetailActivity import com.hupu.tv.player.app.ui.activity.NewMatchDetailActivity
import com.hupu.tv.player.app.ui.adapter.HomeBannerAdapter
import com.hupu.tv.player.app.ui.adapter.LiveItemAdapter import com.hupu.tv.player.app.ui.adapter.LiveItemAdapter
import com.hupu.tv.player.app.ui.adapter.LiveTopAdapter import com.hupu.tv.player.app.ui.adapter.LiveTopAdapter
import com.hupu.tv.player.app.ui.contact.MainContentAllContract import com.hupu.tv.player.app.ui.contact.MainContentAllContract
...@@ -32,6 +33,9 @@ import com.hupu.tv.player.app.utils.DialogUtils ...@@ -32,6 +33,9 @@ import com.hupu.tv.player.app.utils.DialogUtils
import com.hupu.tv.player.app.widget.ImageCarousel import com.hupu.tv.player.app.widget.ImageCarousel
import com.softgarden.baselibrary.utils.SPUtil import com.softgarden.baselibrary.utils.SPUtil
import com.softgarden.baselibrary.utils.ToastUtil import com.softgarden.baselibrary.utils.ToastUtil
import com.zhpan.bannerview.BannerViewPager
import com.zhpan.bannerview.constants.PageStyle
import com.zhpan.indicator.enums.IndicatorSlideMode
import kotlinx.android.synthetic.main.fragment_match_all.* import kotlinx.android.synthetic.main.fragment_match_all.*
import me.jessyan.autosize.utils.LogUtils import me.jessyan.autosize.utils.LogUtils
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
...@@ -44,7 +48,6 @@ import org.greenrobot.eventbus.ThreadMode ...@@ -44,7 +48,6 @@ import org.greenrobot.eventbus.ThreadMode
* @describe * @describe
*/ */
class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainContentAllContract.Display { class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainContentAllContract.Display {
private var imageCarousel: ImageCarousel? = null
private var sportId: String = "" private var sportId: String = ""
private var liveItemAdapter: LiveItemAdapter? = null private var liveItemAdapter: LiveItemAdapter? = null
private var liveTopAdapter: LiveTopAdapter? = null private var liveTopAdapter: LiveTopAdapter? = null
...@@ -63,23 +66,18 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC ...@@ -63,23 +66,18 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC
} }
private fun initView() { private fun initView() {
presenter?.initDot(lineLayout_dot, main_view_pager, tv_pager_title) initBanner()
liveItemAdapter = LiveItemAdapter(R.layout.item_match_normal_live, this) liveItemAdapter = LiveItemAdapter(R.layout.item_match_normal_live, this)
mRecyclerView?.layoutManager = GridLayoutManager(activity, 2) mRecyclerView?.layoutManager = GridLayoutManager(activity, 2)
activity?.let { RecyclerViewUtil.addGridItemDecoration(it, mRecyclerView!!, R.color.transparent, 2 * Constants.item_divider_4) } activity?.let { RecyclerViewUtil.addGridItemDecoration(it, mRecyclerView!!, R.color.transparent, 2 * Constants.item_divider_4) }
mRecyclerView?.adapter = liveItemAdapter mRecyclerView?.adapter = liveItemAdapter
liveItemAdapter?.setOnItemClickListener { adapter, view, position -> liveItemAdapter?.setOnItemClickListener { adapter, view, position ->
if (SPUtil[Constants.USER_LOGIN, false] as Boolean) {
val item: LiveBean.DataListBean = adapter.getItem(position) as LiveBean.DataListBean val item: LiveBean.DataListBean = adapter.getItem(position) as LiveBean.DataListBean
val intent = Intent(activity, LiveActivity::class.java) val intent = Intent(activity, LiveActivity::class.java)
intent.putExtra(Constants.ROOM_ID, item.roomId) intent.putExtra(Constants.ROOM_ID, item.roomId)
intent.putExtra(Constants.ROOM_COVER, item.matchCutImg) intent.putExtra(Constants.ROOM_COVER, item.matchCutImg)
// intent.putExtra(Constants.SPORT_ID,item.anchorName)
startActivity(intent) startActivity(intent)
} else {
DialogUtils.showLogin(mContext as AppCompatActivity)
// startActivity(LoginActivity::class.java)
}
} }
...@@ -110,32 +108,23 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC ...@@ -110,32 +108,23 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC
} }
} }
private fun initBanner() {
/** val list = SPUtil.getSerializableObject<ArrayList<BannerBean>>(Constants.BANNER_LIST)
* 暂停已经隐藏Fragment的轮播图 val bannerViewPager = banner_view as BannerViewPager<BannerBean>
* 继续现在显示Fragment的轮播图 bannerViewPager
*/ .setIndicatorVisibility(View.GONE)
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true, priority = 1) .setLifecycleRegistry(lifecycle)
fun onEventVisible(event: VisibleEvent) { .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
if (event.className == parentFragment?.javaClass?.simpleName) { .setPageStyle(PageStyle.NORMAL)
if (event.isVisible) { //再MultiPageScale的模式下,左右各突出多少
imageCarousel?.startAutoPlay() // .setRevealWidth(30, 30)
} else { .setOnPageClickListener { clickedView: View?, position: Int ->
imageCarousel?.stopAutoPlay() //点击事件
}
} }
.setAdapter(HomeBannerAdapter()).create(list)
} }
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser) {
imageCarousel?.startAutoPlay()
} else {
imageCarousel?.stopAutoPlay()
}
L.e("isVisible", "$this=======visibleToUser$isVisibleToUser")
}
override fun lazyLoad() { override fun lazyLoad() {
...@@ -166,15 +155,6 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC ...@@ -166,15 +155,6 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC
} }
override fun onDot(imageCarousel: ImageCarousel) {
this.imageCarousel = imageCarousel
imageCarousel.startAutoPlay()
imageCarousel.setOnItemClickListener(object : ImageCarousel.OnItemClickListener {
override fun onClick(url: String?, adType: String) {
//轮播图点击事件
}
})
}
override fun onRequestLiveData(data: List<LiveBean.DataListBean>?) { override fun onRequestLiveData(data: List<LiveBean.DataListBean>?) {
liveItemAdapter?.let { liveItemAdapter?.let {
...@@ -196,7 +176,7 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC ...@@ -196,7 +176,7 @@ class MainContentAllFragment : ToolbarFragment<MainContentAllPresenter>(), MainC
override fun onMessage(data: List<MessageBean.DataListBean>?) { override fun onMessage(data: List<MessageBean.DataListBean>?) {
data?.let {list-> data?.let {list->
if (list.isNotEmpty()){ if (list.isNotEmpty()){
ll_message.visibility = View.VISIBLE ll_message.visibility = View.GONE
tv_message.text =list[0].title tv_message.text =list[0].title
ll_message.setOnClickListener { ll_message.setOnClickListener {
DialogUtils.showMessage(requireActivity() as AppCompatActivity,list[0].content) DialogUtils.showMessage(requireActivity() as AppCompatActivity,list[0].content)
......
...@@ -60,17 +60,23 @@ class MainContentNormalFragment : ToolbarFragment<MainContentNormalPresenter>(), ...@@ -60,17 +60,23 @@ class MainContentNormalFragment : ToolbarFragment<MainContentNormalPresenter>(),
mRecyclerView?.layoutManager = GridLayoutManager(activity, 2) mRecyclerView?.layoutManager = GridLayoutManager(activity, 2)
activity?.let { RecyclerViewUtil.addGridItemDecoration(it, mRecyclerView!!, R.color.transparent, 2 * Constants.item_divider) } activity?.let { RecyclerViewUtil.addGridItemDecoration(it, mRecyclerView!!, R.color.transparent, 2 * Constants.item_divider) }
liveItemAdapter?.setOnItemClickListener { adapter, view, position -> liveItemAdapter?.setOnItemClickListener { adapter, view, position ->
if (SPUtil[Constants.USER_LOGIN, false] as Boolean) {
val item:LiveBean.DataListBean = adapter.getItem(position) as LiveBean.DataListBean val item:LiveBean.DataListBean = adapter.getItem(position) as LiveBean.DataListBean
val intent = Intent(activity, LiveActivity::class.java) val intent = Intent(activity, LiveActivity::class.java)
intent.putExtra(Constants.ROOM_ID,item.roomId) intent.putExtra(Constants.ROOM_ID,item.roomId)
intent.putExtra(Constants.ROOM_COVER,item.matchCutImg) intent.putExtra(Constants.ROOM_COVER,item.matchCutImg)
// intent.putExtra(Constants.SPORT_ID,item.anchorName) // intent.putExtra(Constants.SPORT_ID,item.anchorName)
startActivity(intent) startActivity(intent)
} else { // if (SPUtil[Constants.USER_LOGIN, false] as Boolean) {
DialogUtils.showLogin(mContext as AppCompatActivity) // val item:LiveBean.DataListBean = adapter.getItem(position) as LiveBean.DataListBean
// startActivity(LoginActivity::class.java) // val intent = Intent(activity, LiveActivity::class.java)
} // intent.putExtra(Constants.ROOM_ID,item.roomId)
// intent.putExtra(Constants.ROOM_COVER,item.matchCutImg)
//// intent.putExtra(Constants.SPORT_ID,item.anchorName)
// startActivity(intent)
// } else {
// DialogUtils.showLogin(mContext as AppCompatActivity)
//// startActivity(LoginActivity::class.java)
// }
} }
......
...@@ -2,6 +2,7 @@ package com.hupu.tv.player.app.ui.fragment ...@@ -2,6 +2,7 @@ package com.hupu.tv.player.app.ui.fragment
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
...@@ -15,10 +16,15 @@ import com.hupu.tv.player.app.base.ToolbarFragment ...@@ -15,10 +16,15 @@ import com.hupu.tv.player.app.base.ToolbarFragment
import com.hupu.tv.player.app.bean.* import com.hupu.tv.player.app.bean.*
import com.hupu.tv.player.app.event.VisibleEvent import com.hupu.tv.player.app.event.VisibleEvent
import com.hupu.tv.player.app.ui.activity.NewsDetailActivity import com.hupu.tv.player.app.ui.activity.NewsDetailActivity
import com.hupu.tv.player.app.ui.adapter.HomeBannerAdapter
import com.hupu.tv.player.app.ui.adapter.NewsListAdapter import com.hupu.tv.player.app.ui.adapter.NewsListAdapter
import com.hupu.tv.player.app.ui.contact.MainNewsContentAllContract import com.hupu.tv.player.app.ui.contact.MainNewsContentAllContract
import com.hupu.tv.player.app.ui.presenter.MainNewsContentAllPresenter import com.hupu.tv.player.app.ui.presenter.MainNewsContentAllPresenter
import com.hupu.tv.player.app.widget.ImageCarousel import com.hupu.tv.player.app.widget.ImageCarousel
import com.softgarden.baselibrary.utils.SPUtil
import com.zhpan.bannerview.BannerViewPager
import com.zhpan.bannerview.constants.PageStyle
import com.zhpan.indicator.enums.IndicatorSlideMode
import kotlinx.android.synthetic.main.fragment_news_all.* import kotlinx.android.synthetic.main.fragment_news_all.*
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
...@@ -30,7 +36,6 @@ import org.greenrobot.eventbus.ThreadMode ...@@ -30,7 +36,6 @@ import org.greenrobot.eventbus.ThreadMode
* @describe * @describe
*/ */
class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>(), MainNewsContentAllContract.Display { class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>(), MainNewsContentAllContract.Display {
private var imageCarousel: ImageCarousel? = null
private var tagId: String = "" private var tagId: String = ""
private lateinit var newsAdapter: NewsListAdapter private lateinit var newsAdapter: NewsListAdapter
override val layoutId: Int override val layoutId: Int
...@@ -41,14 +46,15 @@ class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>( ...@@ -41,14 +46,15 @@ class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>(
} }
override fun initEventAndData() { override fun initEventAndData() {
EventBus.getDefault().register(this)
initRefreshLayout() initRefreshLayout()
initRecyclerView() initRecyclerView()
initView() initView()
} }
private fun initView() { private fun initView() {
presenter?.initDot(lineLayout_dot, main_view_pager, tv_pager_title)
initBanner()
newsAdapter = NewsListAdapter(R.layout.item_news, this) newsAdapter = NewsListAdapter(R.layout.item_news, this)
mRecyclerView?.layoutManager = LinearLayoutManager(requireContext()) mRecyclerView?.layoutManager = LinearLayoutManager(requireContext())
activity?.let { RecyclerViewUtil.addItemDecoration(it, mRecyclerView!!, R.color.view_color, 1) } activity?.let { RecyclerViewUtil.addItemDecoration(it, mRecyclerView!!, R.color.view_color, 1) }
...@@ -65,34 +71,22 @@ class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>( ...@@ -65,34 +71,22 @@ class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>(
} }
} }
private fun initBanner() {
/** val list = SPUtil.getSerializableObject<ArrayList<BannerBean>>(Constants.NEWS_HEAD_LIST)
* 暂停已经隐藏Fragment的轮播图 val bannerViewPager = banner_view as BannerViewPager<BannerBean>
* 继续现在显示Fragment的轮播图 bannerViewPager
*/ .setIndicatorVisibility(View.GONE)
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true, priority = 1) .setLifecycleRegistry(lifecycle)
fun onEventVisible(event: VisibleEvent) { .setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
if (event.className == parentFragment?.javaClass?.simpleName) { .setPageStyle(PageStyle.NORMAL)
if (event.isVisible) { //再MultiPageScale的模式下,左右各突出多少
imageCarousel?.startAutoPlay() // .setRevealWidth(30, 30)
} else { .setOnPageClickListener { clickedView: View?, position: Int ->
imageCarousel?.stopAutoPlay() //点击事件
}
}
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser) {
imageCarousel?.startAutoPlay()
} else {
imageCarousel?.stopAutoPlay()
} }
L.e("isVisible", "$this=======visibleToUser$isVisibleToUser") .setAdapter(HomeBannerAdapter()).create(list)
} }
override fun lazyLoad() { override fun lazyLoad() {
presenter?.getNewsList(tagId, mPage) presenter?.getNewsList(tagId, mPage)
} }
...@@ -114,30 +108,9 @@ class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>( ...@@ -114,30 +108,9 @@ class MainNewsContentAllFragment : ToolbarFragment<MainNewsContentAllPresenter>(
} }
override fun onDot(imageCarousel: ImageCarousel) {
this.imageCarousel = imageCarousel
imageCarousel.startAutoPlay()
imageCarousel.setOnItemClickListener(object : ImageCarousel.OnItemClickListener {
override fun onClick(url: String?, adType: String) {
//轮播图点击事件
}
})
}
override fun onRequestLiveData(data: List<LiveBean.DataListBean>?) { override fun onRequestLiveData(data: List<LiveBean.DataListBean>?) {
newsAdapter?.let { newsAdapter?.let {
setLoadMore(it, data) setLoadMore(it, data)
} }
} }
override fun onDestroy() {
EventBus.getDefault().unregister(this)
super.onDestroy()
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
} }
\ No newline at end of file
...@@ -14,6 +14,8 @@ import com.hupu.tv.player.app.bean.MatchOddEntity ...@@ -14,6 +14,8 @@ import com.hupu.tv.player.app.bean.MatchOddEntity
import com.hupu.tv.player.app.ui.contact.MatchIndexContact import com.hupu.tv.player.app.ui.contact.MatchIndexContact
import com.hupu.tv.player.app.ui.presenter.MatchIndexPresenter import com.hupu.tv.player.app.ui.presenter.MatchIndexPresenter
import com.softgarden.baselibrary.base.FragmentBasePagerAdapter import com.softgarden.baselibrary.base.FragmentBasePagerAdapter
import com.softgarden.baselibrary.base.IBaseDisplay
import com.softgarden.baselibrary.base.IBasePresenter
import kotlinx.android.synthetic.main.fragment_detail_index.* import kotlinx.android.synthetic.main.fragment_detail_index.*
...@@ -23,7 +25,7 @@ import kotlinx.android.synthetic.main.fragment_detail_index.* ...@@ -23,7 +25,7 @@ import kotlinx.android.synthetic.main.fragment_detail_index.*
* @date on 2020/6/14 * @date on 2020/6/14
* @describe * @describe
*/ */
class MatchIndexFragment : ToolbarFragment<MatchIndexPresenter>(), MatchIndexContact.Display { class MatchIndexFragment : ToolbarFragment<IBasePresenter>(), IBaseDisplay {
private val handicapList = arrayListOf<MatchIndexDataEntity>() private val handicapList = arrayListOf<MatchIndexDataEntity>()
private val indemnityList = arrayListOf<MatchIndexDataEntity>() private val indemnityList = arrayListOf<MatchIndexDataEntity>()
private val totalList = arrayListOf<MatchIndexDataEntity>() private val totalList = arrayListOf<MatchIndexDataEntity>()
...@@ -121,39 +123,39 @@ class MatchIndexFragment : ToolbarFragment<MatchIndexPresenter>(), MatchIndexCon ...@@ -121,39 +123,39 @@ class MatchIndexFragment : ToolbarFragment<MatchIndexPresenter>(), MatchIndexCon
} }
} }
override fun onodds(data: List<MatchOddEntity?>?) { // override fun onodds(data: List<MatchOddEntity?>?) {
//
data?.forEach { // data?.forEach {
val companyInfo = it?.companyInfos?.get(0) // val companyInfo = it?.companyInfos?.get(0)
val companyName = companyInfo?.companyName // val companyName = companyInfo?.companyName
val handicapFirst = companyInfo?.ranFen?.initialOdds?.away?.toString() // val handicapFirst = companyInfo?.ranFen?.initialOdds?.away?.toString()
val handicapSecond = companyInfo?.ranFen?.initialOdds?.handicap?.toString() // val handicapSecond = companyInfo?.ranFen?.initialOdds?.handicap?.toString()
val handicapThird = companyInfo?.ranFen?.initialOdds?.home?.toString() // val handicapThird = companyInfo?.ranFen?.initialOdds?.home?.toString()
val handicapFourth = companyInfo?.ranFen?.nowOdds?.away?.toString() // val handicapFourth = companyInfo?.ranFen?.nowOdds?.away?.toString()
val handicapFifth = companyInfo?.ranFen?.nowOdds?.handicap?.toString() // val handicapFifth = companyInfo?.ranFen?.nowOdds?.handicap?.toString()
val handicapSixth = companyInfo?.ranFen?.nowOdds?.home?.toString() // val handicapSixth = companyInfo?.ranFen?.nowOdds?.home?.toString()
val handicapEntity = MatchIndexDataEntity(companyName, handicapFirst, handicapSecond, handicapThird, handicapFourth, handicapFifth, handicapSixth) // val handicapEntity = MatchIndexDataEntity(companyName, handicapFirst, handicapSecond, handicapThird, handicapFourth, handicapFifth, handicapSixth)
handicapList.add(handicapEntity) // handicapList.add(handicapEntity)
//
val indemnityFirst = companyInfo?.ouZhi?.initialOdds?.away?.toString() // val indemnityFirst = companyInfo?.ouZhi?.initialOdds?.away?.toString()
val indemnitySecond = companyInfo?.ouZhi?.initialOdds?.handicap?.toString() // val indemnitySecond = companyInfo?.ouZhi?.initialOdds?.handicap?.toString()
val indemnityThird = companyInfo?.ouZhi?.initialOdds?.home?.toString() // val indemnityThird = companyInfo?.ouZhi?.initialOdds?.home?.toString()
val indemnityFourth = companyInfo?.ouZhi?.nowOdds?.away?.toString() // val indemnityFourth = companyInfo?.ouZhi?.nowOdds?.away?.toString()
val indemnityFifth = companyInfo?.ouZhi?.nowOdds?.handicap?.toString() // val indemnityFifth = companyInfo?.ouZhi?.nowOdds?.handicap?.toString()
val indemnitySixth = companyInfo?.ouZhi?.nowOdds?.home?.toString() // val indemnitySixth = companyInfo?.ouZhi?.nowOdds?.home?.toString()
val indemnityEntity = MatchIndexDataEntity(companyName, indemnityFirst, indemnitySecond, indemnityThird, indemnityFourth, indemnityFifth, indemnitySixth) // val indemnityEntity = MatchIndexDataEntity(companyName, indemnityFirst, indemnitySecond, indemnityThird, indemnityFourth, indemnityFifth, indemnitySixth)
indemnityList.add(indemnityEntity) // indemnityList.add(indemnityEntity)
//
//
val totalFirst = companyInfo?.daXiao?.initialOdds?.away?.toString() // val totalFirst = companyInfo?.daXiao?.initialOdds?.away?.toString()
val totalSecond = companyInfo?.daXiao?.initialOdds?.handicap?.toString() // val totalSecond = companyInfo?.daXiao?.initialOdds?.handicap?.toString()
val totalThird = companyInfo?.daXiao?.initialOdds?.home?.toString() // val totalThird = companyInfo?.daXiao?.initialOdds?.home?.toString()
val totalFourth = companyInfo?.daXiao?.nowOdds?.away?.toString() // val totalFourth = companyInfo?.daXiao?.nowOdds?.away?.toString()
val totalFifth = companyInfo?.daXiao?.nowOdds?.handicap?.toString() // val totalFifth = companyInfo?.daXiao?.nowOdds?.handicap?.toString()
val totalSixth = companyInfo?.daXiao?.nowOdds?.home?.toString() // val totalSixth = companyInfo?.daXiao?.nowOdds?.home?.toString()
val totalEntity = MatchIndexDataEntity(companyName, totalFirst, totalSecond, totalThird, totalFourth, totalFifth, totalSixth) // val totalEntity = MatchIndexDataEntity(companyName, totalFirst, totalSecond, totalThird, totalFourth, totalFifth, totalSixth)
totalList.add(totalEntity) // totalList.add(totalEntity)
initViewPager() // initViewPager()
} // }
} // }
} }
\ No newline at end of file
...@@ -53,20 +53,20 @@ public class CustomTextRow extends EaseChatRowText { ...@@ -53,20 +53,20 @@ public class CustomTextRow extends EaseChatRowText {
@Override @Override
protected void onInflateView() { protected void onInflateView() {
inflater.inflate(!showSenderType ? R.layout.custom_row_received_message inflater.inflate(R.layout.custom_row_received_message, this);
: R.layout.custom_row_sent_message, this);
} }
@Override @Override
protected void setAvatarAndNick() { protected void setAvatarAndNick() {
String userNick = message.getStringAttribute(Constants.USER_NICK, message.getFrom()); String userNick = message.getStringAttribute(Constants.USER_NICK, message.getFrom());
int level = message.getIntAttribute(Constants.USER_LEVEL, 1); int level = message.getIntAttribute(Constants.USER_LEVEL, 1);
userNick = userNick.replace("\n", "");
if (isSender()) { if (isSender()) {
EaseUserUtils.setUserAvatar(context, EMClient.getInstance().getCurrentUser(), userAvatarView); EaseUserUtils.setUserAvatar(context, EMClient.getInstance().getCurrentUser(), userAvatarView);
//只要不是常规布局形式,就展示昵称 //只要不是常规布局形式,就展示昵称
if (EaseChatItemStyleHelper.getInstance().getStyle().getItemShowType() != EaseChatMessageListLayout.ShowType.NORMAL.ordinal()) { if (EaseChatItemStyleHelper.getInstance().getStyle().getItemShowType() != EaseChatMessageListLayout.ShowType.NORMAL.ordinal()) {
EaseUserUtils.setUserNick(userNick+ ":", usernickView); EaseUserUtils.setUserNick(userNick+":", usernickView);
tvLevel.setText("LV." +level); tvLevel.setText("LV." +level);
} }
...@@ -74,7 +74,7 @@ public class CustomTextRow extends EaseChatRowText { ...@@ -74,7 +74,7 @@ public class CustomTextRow extends EaseChatRowText {
//todo 接受来的昵称 //todo 接受来的昵称
EaseUserUtils.setUserAvatar(context, message.getFrom(), userAvatarView); EaseUserUtils.setUserAvatar(context, message.getFrom(), userAvatarView);
EaseUserUtils.setUserNick(userNick + ":", usernickView); EaseUserUtils.setUserNick(userNick+":", usernickView);
tvLevel.setText("LV." + level); tvLevel.setText("LV." + level);
} }
} }
......
...@@ -67,7 +67,7 @@ class LoginActivityPresenter : IBasePresenter, LoginActivityContact.Present { ...@@ -67,7 +67,7 @@ class LoginActivityPresenter : IBasePresenter, LoginActivityContact.Present {
// else { // else {
// DialogUtils.showReContact(mView as AppCompatActivity, object : DialogUtils.OnClickSingleListener { // DialogUtils.showReContact(mView as AppCompatActivity, object : DialogUtils.OnClickSingleListener {
// override fun onClick() { // override fun onClick() {
// mTvMessage?.text = mTvMessage?.text.toString() + "\n" + "重新登" // mTvMessage?.text = mTvMessage?.text.toString() + "\n" + "重新登"
// login(phone,nickName,smsCode,userAvatar) // login(phone,nickName,smsCode,userAvatar)
// } // }
// }) // })
......
...@@ -26,38 +26,15 @@ import com.hupu.tv.player.app.widget.ImageCarousel ...@@ -26,38 +26,15 @@ import com.hupu.tv.player.app.widget.ImageCarousel
*/ */
class MainContentAllPresenter : IBasePresenter, MainContentAllContract.Presenter { class MainContentAllPresenter : IBasePresenter, MainContentAllContract.Presenter {
private var mView: MainContentAllContract.Display? = null private var mView: MainContentAllContract.Display? = null
private var imageInfoList = ArrayList<ImageInfo>()
private var dots: ArrayList<View?>? = arrayListOf()
private var imageCarousel: ImageCarousel? = null
override fun attachView(view: IBaseDisplay?) { override fun attachView(view: IBaseDisplay?) {
mView = view as MainContentAllContract.Display? mView = view as MainContentAllContract.Display?
} }
override fun detachView() { override fun detachView() {
imageCarousel?.stopAutoPlay()
imageCarousel?.adapter = null
imageCarousel?.weakReference = null
imageCarousel?.weakReferenceT = null
imageCarousel?.weakReferenceV = null
imageCarousel = null
dots = null
} }
override fun initDot(linearLayout: LinearLayout, viewPager: ViewPager, textView: TextView) {
if (imageCarousel == null) {
val list = SPUtil.getSerializableObject<ArrayList<BannerBean>>(Constants.BANNER_LIST)
linearLayout.removeAllViews()
dots = addDots(linearLayout, mView?.baseActivity?.resources?.getDrawable(R.drawable.shape_dot_normal), list?.size
?: 0)
imageCarousel = mView?.baseFragment?.let { ImageCarousel(it, viewPager, textView, dots, Constants.IMAGE_CAROUSEL_TIME) }
imageCarousel?.init(list)
imageCarousel?.start()
imageCarousel?.let {
mView?.onDot(it)
}
}
}
override fun reserveMatch(id: String) { override fun reserveMatch(id: String) {
...@@ -145,39 +122,4 @@ class MainContentAllPresenter : IBasePresenter, MainContentAllContract.Presenter ...@@ -145,39 +122,4 @@ class MainContentAllPresenter : IBasePresenter, MainContentAllContract.Presenter
} }
}) })
} }
private fun addDots(linearLayout: LinearLayout, background: Drawable?, number: Int): ArrayList<View?>? {
for (index in 2..number - 1) { // 注意这里的 i 从 2 开始,只画出number个点
var dotId = addDot(linearLayout, background)
dots?.add(mView?.baseActivity?.findViewById(dotId))
}
return dots
}
/**
* 动态添加一个点
*
* @param linearLayout 添加到LinearLayout布局
* @param backgount 设置
* @return 小点的Id
*/
private fun addDot(linearLayout: LinearLayout, backgount: Drawable?): Int {
var dot = View(mView?.baseActivity)
var dotParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
dotParams.width = 16
dotParams.height = 16
dotParams.setMargins(4, 0, 4, 0)
dot.layoutParams = dotParams
dot.background = backgount
dot.id = View.generateViewId()
this.run {
linearLayout.addView(dot)
}
return dot.id
}
} }
\ No newline at end of file
...@@ -26,37 +26,13 @@ import com.hupu.tv.player.app.widget.ImageCarousel ...@@ -26,37 +26,13 @@ import com.hupu.tv.player.app.widget.ImageCarousel
*/ */
class MainNewsContentAllPresenter : IBasePresenter, MainNewsContentAllContract.Presenter { class MainNewsContentAllPresenter : IBasePresenter, MainNewsContentAllContract.Presenter {
private var mView: MainNewsContentAllContract.Display? = null private var mView: MainNewsContentAllContract.Display? = null
private var imageInfoList = ArrayList<ImageInfo>()
private var dots: ArrayList<View?>? = arrayListOf()
private var imageCarousel: ImageCarousel? = null
override fun attachView(view: IBaseDisplay?) { override fun attachView(view: IBaseDisplay?) {
mView = view as MainNewsContentAllContract.Display? mView = view as MainNewsContentAllContract.Display?
} }
override fun detachView() { override fun detachView() {
imageCarousel?.stopAutoPlay()
imageCarousel?.adapter = null
imageCarousel?.weakReference = null
imageCarousel?.weakReferenceT = null
imageCarousel?.weakReferenceV = null
imageCarousel = null
dots = null
}
override fun initDot(linearLayout: LinearLayout, viewPager: ViewPager, textView: TextView) {
if (imageCarousel == null) {
val list = SPUtil.getSerializableObject<ArrayList<BannerBean>>(Constants.NEWS_HEAD_LIST)
linearLayout.removeAllViews()
dots = addDots(linearLayout, mView?.baseActivity?.resources?.getDrawable(R.drawable.shape_dot_normal), list?.size
?: 0)
imageCarousel = mView?.baseFragment?.let { ImageCarousel(it, viewPager, textView, dots, Constants.IMAGE_CAROUSEL_TIME) }
imageCarousel?.init(list)
imageCarousel?.start()
imageCarousel?.let {
mView?.onDot(it)
}
}
} }
...@@ -76,39 +52,4 @@ class MainNewsContentAllPresenter : IBasePresenter, MainNewsContentAllContract.P ...@@ -76,39 +52,4 @@ class MainNewsContentAllPresenter : IBasePresenter, MainNewsContentAllContract.P
} }
private fun addDots(linearLayout: LinearLayout, background: Drawable?, number: Int): ArrayList<View?>? {
for (index in 2..number - 1) { // 注意这里的 i 从 2 开始,只画出number个点
var dotId = addDot(linearLayout, background)
dots?.add(mView?.baseActivity?.findViewById(dotId))
}
return dots
}
/**
* 动态添加一个点
*
* @param linearLayout 添加到LinearLayout布局
* @param backgount 设置
* @return 小点的Id
*/
private fun addDot(linearLayout: LinearLayout, backgount: Drawable?): Int {
var dot = View(mView?.baseActivity)
var dotParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
dotParams.width = 16
dotParams.height = 16
dotParams.setMargins(4, 0, 4, 0)
dot.layoutParams = dotParams
dot.background = backgount
dot.id = View.generateViewId()
this.run {
linearLayout.addView(dot)
}
return dot.id
}
} }
\ No newline at end of file
...@@ -42,10 +42,7 @@ class SettingPresenter : IBasePresenter, SettingContact.presenter { ...@@ -42,10 +42,7 @@ class SettingPresenter : IBasePresenter, SettingContact.presenter {
.compose(NetworkTransformer(mView, false)) .compose(NetworkTransformer(mView, false))
.subscribe(object : RxCallback<String>() { .subscribe(object : RxCallback<String>() {
override fun onSuccess(data: String?) { override fun onSuccess(data: String?) {
SPUtil.put(Constants.TOKEN, "") CommonUtils.exitLogOut()
SPUtil.put(Constants.USER_LOGIN, false)
EventBus.getDefault().post(RefreshUserEvent())
CommonUtils.umengLoginOut()
mView?.onExit() mView?.onExit()
} }
}) })
...@@ -57,10 +54,7 @@ class SettingPresenter : IBasePresenter, SettingContact.presenter { ...@@ -57,10 +54,7 @@ class SettingPresenter : IBasePresenter, SettingContact.presenter {
.compose(NetworkTransformer(mView, false)) .compose(NetworkTransformer(mView, false))
.subscribe(object : RxCallback<String>() { .subscribe(object : RxCallback<String>() {
override fun onSuccess(data: String?) { override fun onSuccess(data: String?) {
SPUtil.put(Constants.TOKEN, "") CommonUtils.exitLogOut()
SPUtil.put(Constants.USER_LOGIN, false)
EventBus.getDefault().post(RefreshUserEvent())
CommonUtils.umengLoginOut()
mView?.onExit() mView?.onExit()
} }
}) })
......
...@@ -59,7 +59,7 @@ class SplashActivityPresenter : IBasePresenter, SplashActivityContact.Presenter ...@@ -59,7 +59,7 @@ class SplashActivityPresenter : IBasePresenter, SplashActivityContact.Presenter
.compose(NetworkTransformer(mView,false)) .compose(NetworkTransformer(mView,false))
.subscribe(object : RxCallback<ArrayList<BannerBean>>() { .subscribe(object : RxCallback<ArrayList<BannerBean>>() {
override fun onSuccess(data: ArrayList<BannerBean>?) { override fun onSuccess(data: ArrayList<BannerBean>?) {
SPUtil.putSerializableObject(Constants.BANNER_LIST,BannerBean.dealData(data)) SPUtil.putSerializableObject(Constants.BANNER_LIST,data)
mTvMessage?.text = mTvMessage?.text.toString() + "\n" + "请求Banner成功" mTvMessage?.text = mTvMessage?.text.toString() + "\n" + "请求Banner成功"
getNewsList() getNewsList()
} }
...@@ -68,12 +68,13 @@ class SplashActivityPresenter : IBasePresenter, SplashActivityContact.Presenter ...@@ -68,12 +68,13 @@ class SplashActivityPresenter : IBasePresenter, SplashActivityContact.Presenter
private fun getNewsList() { private fun getNewsList() {
RetrofitClient.retrofitService RetrofitClient.retrofitService
.getNewsHeadList() .getNewsHeadList(JsonUtils.toRequestBody(hashMapOf<String,Any>().apply {
put("adType",2)
}))
.compose(NetworkTransformer(mView)) .compose(NetworkTransformer(mView))
.subscribe(object : RxCallback<List<NewsHeadEntity>>() { .subscribe(object : RxCallback<List<BannerBean>>() {
override fun onSuccess(data: List<NewsHeadEntity>?) { override fun onSuccess(data: List<BannerBean>?) {
val newHeadToBanner = newHeadToBanner(data) SPUtil.putSerializableObject(Constants.NEWS_HEAD_LIST,data)
SPUtil.putSerializableObject(Constants.NEWS_HEAD_LIST,BannerBean.dealData(newHeadToBanner))
mTvMessage?.text = mTvMessage?.text.toString() + "\n" + "请求HeadList成功" mTvMessage?.text = mTvMessage?.text.toString() + "\n" + "请求HeadList成功"
getShareConfig() getShareConfig()
} }
......
...@@ -21,6 +21,7 @@ import com.hupu.tv.player.app.app.App ...@@ -21,6 +21,7 @@ import com.hupu.tv.player.app.app.App
import com.hupu.tv.player.app.app.App.Companion.instance import com.hupu.tv.player.app.app.App.Companion.instance
import com.hupu.tv.player.app.app.Constants import com.hupu.tv.player.app.app.Constants
import com.hupu.tv.player.app.bean.MovieBean.RecordsBean import com.hupu.tv.player.app.bean.MovieBean.RecordsBean
import com.hupu.tv.player.app.event.RefreshUserEvent
import com.hupu.tv.player.app.utils.DateUtil.unitFormat import com.hupu.tv.player.app.utils.DateUtil.unitFormat
import com.hupu.tv.player.app.widget.LinkTextView import com.hupu.tv.player.app.widget.LinkTextView
import com.hyphenate.util.UriUtils.* import com.hyphenate.util.UriUtils.*
...@@ -30,6 +31,7 @@ import com.softgarden.baselibrary.utils.SPUtil.Companion.putSerializableObject ...@@ -30,6 +31,7 @@ import com.softgarden.baselibrary.utils.SPUtil.Companion.putSerializableObject
import com.softgarden.baselibrary.utils.ToastUtil import com.softgarden.baselibrary.utils.ToastUtil
import com.softgarden.baselibrary.utils.ToastUtil.Companion.s import com.softgarden.baselibrary.utils.ToastUtil.Companion.s
import com.umeng.analytics.MobclickAgent import com.umeng.analytics.MobclickAgent
import org.greenrobot.eventbus.EventBus
import java.io.Serializable import java.io.Serializable
import java.text.ParseException import java.text.ParseException
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
...@@ -611,6 +613,13 @@ object CommonUtils { ...@@ -611,6 +613,13 @@ object CommonUtils {
MobclickAgent.onProfileSignOff() MobclickAgent.onProfileSignOff()
} }
fun exitLogOut(){
SPUtil.put(Constants.TOKEN, "")
SPUtil.put(Constants.USER_LOGIN, false)
EventBus.getDefault().post(RefreshUserEvent())
CommonUtils.umengLoginOut()
}
// fun getTestDeviceInfo(context: Context?): Array<String?>? { // fun getTestDeviceInfo(context: Context?): Array<String?>? {
// val deviceInfo = arrayOfNulls<String>(2) // val deviceInfo = arrayOfNulls<String>(2)
......
...@@ -4,6 +4,7 @@ import android.app.Activity; ...@@ -4,6 +4,7 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import androidx.core.graphics.drawable.RoundedBitmapDrawable; import androidx.core.graphics.drawable.RoundedBitmapDrawable;
...@@ -109,6 +110,13 @@ public class GlideUtils { ...@@ -109,6 +110,13 @@ public class GlideUtils {
.diskCacheStrategy(DiskCacheStrategy.ALL); .diskCacheStrategy(DiskCacheStrategy.ALL);
Glide.with(context).load(url).placeholder(placeHolder).error(placeHolder).apply(options).into(imageView); Glide.with(context).load(url).placeholder(placeHolder).error(placeHolder).apply(options).into(imageView);
} }
public static void loadImage(View context, String url, ImageView imageView, int placeHolder) {
RequestOptions options = new RequestOptions()
.centerCrop()
// .priority(Priority.HIGH)
.diskCacheStrategy(DiskCacheStrategy.ALL);
Glide.with(context).load(url).placeholder(placeHolder).error(placeHolder).apply(options).into(imageView);
}
public static void loadImage(Fragment context, String url, ImageView imageView, int placeHolder) { public static void loadImage(Fragment context, String url, ImageView imageView, int placeHolder) {
RequestOptions options = new RequestOptions() RequestOptions options = new RequestOptions()
......
...@@ -11,23 +11,23 @@ ...@@ -11,23 +11,23 @@
<ImageView <ImageView
android:id="@+id/iv_about" android:id="@+id/iv_about"
android:layout_marginTop="100dp"
android:layout_centerHorizontal="true"
android:src="@mipmap/icon_about"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:src="@mipmap/icon_about" />
<TextView <TextView
android:id="@+id/tv_name" android:id="@+id/tv_name"
android:layout_marginTop="@dimen/dp_15" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/iv_about" android:layout_below="@id/iv_about"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:textSize="23sp" android:layout_marginTop="@dimen/dp_15"
android:text="M直播"
android:textColor="@color/black" android:textColor="@color/black"
android:textStyle="bold" android:textSize="23sp"
android:text="红杉直播" android:textStyle="bold" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView <TextView
android:textStyle="bold" android:textStyle="bold"
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
android:id="@+id/tv_phone" android:id="@+id/tv_phone"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="手机登" android:text="手机登"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="@dimen/sp_19" /> android:textSize="@dimen/sp_19" />
......
...@@ -7,7 +7,14 @@ ...@@ -7,7 +7,14 @@
android:background="@color/white" android:background="@color/white"
android:orientation="vertical"> android:orientation="vertical">
<include layout="@layout/layout_title_live" /> <ImageView
android:id="@+id/iv_left_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/dp_8"
android:scaleType="centerInside"
android:src="@mipmap/icon_live_back_black" />
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:id="@+id/scroll_view" android:id="@+id/scroll_view"
...@@ -27,29 +34,58 @@ ...@@ -27,29 +34,58 @@
android:max="100" android:max="100"
android:visibility="gone" /> android:visibility="gone" />
<LinearLayout
android:layout_marginTop="@dimen/dp_5"
android:paddingStart="@dimen/dp_8"
android:paddingEnd="@dimen/dp_8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:textColor="@color/text_normal"
tools:text="标题标题标题标题标题标题标题"
android:textSize="19sp"
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginTop="@dimen/dp_10"
tools:text="2022-01-30 10:31:00"
android:textColor="@color/grey_normal"
android:textSize="@dimen/sp_13"
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<WebView <WebView
android:layout_marginTop="@dimen/dp_10"
android:id="@+id/mWebView" android:id="@+id/mWebView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
<LinearLayout <LinearLayout
android:visibility="gone"
android:id="@+id/ll_bottom" android:id="@+id/ll_bottom"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical"
android:visibility="gone">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_marginTop="@dimen/dp_10"
android:layout_marginStart="@dimen/dp_10"
android:id="@+id/recycler_label" android:id="@+id/recycler_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10" />
<LinearLayout <LinearLayout
android:layout_marginTop="@dimen/dp_10"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_40" android:layout_height="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center" android:gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
...@@ -123,7 +159,7 @@ ...@@ -123,7 +159,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_5" android:paddingStart="@dimen/dp_5"
android:paddingEnd="5dp"/> android:paddingEnd="5dp" />
</LinearLayout> </LinearLayout>
......
...@@ -355,7 +355,7 @@ ...@@ -355,7 +355,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="@dimen/dp_20" android:layout_marginStart="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_20" android:layout_marginEnd="@dimen/dp_20"
android:background="@drawable/shape_main_exit_login" android:background="@drawable/shape_get_code"
android:gravity="center" android:gravity="center"
android:textStyle="bold" android:textStyle="bold"
android:text="注销账号" android:text="注销账号"
...@@ -370,7 +370,7 @@ ...@@ -370,7 +370,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="@dimen/dp_20" android:layout_marginStart="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_20" android:layout_marginEnd="@dimen/dp_20"
android:background="@drawable/shape_main_exit_login" android:background="@drawable/shape_get_code"
android:gravity="center" android:gravity="center"
android:textStyle="bold" android:textStyle="bold"
android:text="退出登录" android:text="退出登录"
......
...@@ -45,11 +45,13 @@ ...@@ -45,11 +45,13 @@
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
android:layout_marginStart="@dimen/dp_15" android:layout_marginStart="@dimen/dp_15"
android:text="登录获得金币" android:text="登录获得金币"
android:drawablePadding="@dimen/dp_5"
android:drawableStart="@mipmap/icon_tips_login" android:drawableStart="@mipmap/icon_tips_login"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<TextView <TextView
android:drawablePadding="@dimen/dp_5"
android:textColor="@color/text_normal" android:textColor="@color/text_normal"
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
android:layout_marginStart="@dimen/dp_15" android:layout_marginStart="@dimen/dp_15"
......
...@@ -3,7 +3,9 @@ ...@@ -3,7 +3,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:gravity="center_vertical"
android:orientation="vertical" android:orientation="vertical"
android:minHeight="@dimen/dp_25"
> >
<TextView <TextView
...@@ -15,6 +17,7 @@ ...@@ -15,6 +17,7 @@
android:layout_gravity="center" /> android:layout_gravity="center" />
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
...@@ -25,7 +28,7 @@ ...@@ -25,7 +28,7 @@
<LinearLayout <LinearLayout
android:id="@+id/bubble" android:id="@+id/bubble"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin_chat_activity" android:layout_marginLeft="@dimen/margin_chat_activity"
android:layout_toRightOf="@id/iv_userhead" android:layout_toRightOf="@id/iv_userhead"
...@@ -43,7 +46,6 @@ ...@@ -43,7 +46,6 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<TextView <TextView
android:minHeight="@dimen/dp_25"
android:id="@+id/tv_userid" android:id="@+id/tv_userid"
android:layout_toEndOf="@id/tv_level" android:layout_toEndOf="@id/tv_level"
style="@style/chat_text_name_style" style="@style/chat_text_name_style"
...@@ -58,16 +60,15 @@ ...@@ -58,16 +60,15 @@
android:layout_marginStart="@dimen/dp_5" android:layout_marginStart="@dimen/dp_5"
android:layout_toEndOf="@id/tv_userid" android:layout_toEndOf="@id/tv_userid"
android:id="@+id/tv_chatcontent" android:id="@+id/tv_chatcontent"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:autoLink="web" android:autoLink="web"
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:gravity="center|left" android:gravity="center|left"
android:lineSpacingExtra="2dp" android:lineSpacingExtra="2dp"
android:maxWidth="225.0dip"
android:textColor="#ff000000" android:textColor="#ff000000"
android:textSize="15sp" android:textSize="15sp"
tools:text="文案文案文案文案文文案文案文案文案文文案文案文案文案文文案文案文案文案文文案文案文案文案文文案文案文案文案文文案文案文案文案文文案文案文案文案文"/> tools:text="文案文案"/>
</LinearLayout> </LinearLayout>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_15" android:layout_marginTop="@dimen/dp_15"
android:gravity="center" android:gravity="center"
android:text="登失败" android:text="登失败"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="@dimen/sp_17" android:textSize="@dimen/sp_17"
android:textStyle="bold" /> android:textStyle="bold" />
......
...@@ -36,16 +36,20 @@ ...@@ -36,16 +36,20 @@
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
android:textColor="@color/grey_normal" android:textColor="@color/grey_normal"
android:text="登账号关注喜欢的主播" android:text="登账号关注喜欢的主播"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<ImageView <TextView
android:id="@+id/iv_login" android:gravity="center"
android:src="@mipmap/icon_login" android:textColor="@color/white"
android:textSize="@dimen/sp_13"
android:text="登录/快速注册"
android:id="@+id/tv_login"
android:background="@drawable/shape_get_code"
android:layout_marginTop="@dimen/dp_15" android:layout_marginTop="@dimen/dp_15"
android:layout_width="wrap_content" android:layout_width="130dp"
android:layout_height="wrap_content"/> android:layout_height="@dimen/dp_40"/>
</LinearLayout> </LinearLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
......
...@@ -29,15 +29,19 @@ ...@@ -29,15 +29,19 @@
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
android:textColor="@color/grey_normal" android:textColor="@color/grey_normal"
android:text="登账号预约想看的赛事" android:text="登账号预约想看的赛事"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<ImageView <TextView
android:id="@+id/iv_login" android:gravity="center"
android:src="@mipmap/icon_login" android:textColor="@color/white"
android:textSize="@dimen/sp_13"
android:text="登录/快速注册"
android:id="@+id/tv_login"
android:background="@drawable/shape_get_code"
android:layout_marginTop="@dimen/dp_15" android:layout_marginTop="@dimen/dp_15"
android:layout_width="wrap_content" android:layout_width="130dp"
android:layout_height="wrap_content"/> android:layout_height="@dimen/dp_40"/>
</LinearLayout> </LinearLayout>
......
...@@ -36,52 +36,13 @@ ...@@ -36,52 +36,13 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<FrameLayout <com.zhpan.bannerview.BannerViewPager
android:layout_marginTop="@dimen/dp_5" android:id="@+id/banner_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="165dp" android:layout_height="165dp" />
android:background="@color/transparent"
>
<androidx.viewpager.widget.ViewPager
android:id="@+id/main_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:layout_gravity="bottom"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_pager_title"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_35"
android:gravity="center_vertical"
android:paddingStart="6dp"
android:textColor="@android:color/white"
android:visibility="gone"
tools:text="加载图片轮播失败" />
<LinearLayout
android:id="@+id/lineLayout_dot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="1"
android:gravity="center|right"
android:orientation="horizontal"
android:paddingStart="@dimen/dp_3"
android:paddingEnd="@dimen/dp_3" />
</LinearLayout>
</FrameLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_marginTop="@dimen/dp_20" android:layout_marginTop="@dimen/dp_20"
android:id="@+id/mRecyclerView_top" android:id="@+id/mRecyclerView_top"
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -10,11 +10,9 @@ ...@@ -10,11 +10,9 @@
app:srlEnableScrollContentWhenLoaded="true"> app:srlEnableScrollContentWhenLoaded="true">
<!-- elevation 高版本自带一个阴影,不需要去掉即可 --> <!-- elevation 高版本自带一个阴影,不需要去掉即可 -->
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerView" android:id="@+id/mRecyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent" />
/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout> </com.scwang.smartrefresh.layout.SmartRefreshLayout>
\ No newline at end of file
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
android:layout_height="@dimen/dp_28" android:layout_height="@dimen/dp_28"
android:background="@drawable/shape_login_text" android:background="@drawable/shape_login_text"
android:gravity="center" android:gravity="center"
android:text="登/注册" android:text="登/注册"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="@dimen/sp_16" android:textSize="@dimen/sp_16"
android:textStyle="bold" /> android:textStyle="bold" />
......
...@@ -36,50 +36,10 @@ ...@@ -36,50 +36,10 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<FrameLayout <com.zhpan.bannerview.BannerViewPager
android:layout_marginTop="@dimen/dp_5" android:id="@+id/banner_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="130dp" android:layout_height="165dp" />
android:background="@color/transparent"
>
<androidx.viewpager.widget.ViewPager
android:id="@+id/main_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:layout_gravity="bottom"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_pager_title"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_35"
android:gravity="center_vertical"
android:paddingStart="6dp"
android:textColor="@android:color/white"
android:visibility="gone"
tools:text="加载图片轮播失败" />
<LinearLayout
android:id="@+id/lineLayout_dot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="@dimen/dp_5"
android:layout_weight="1"
android:gravity="center|right"
android:orientation="horizontal"
android:paddingStart="@dimen/dp_3"
android:paddingEnd="@dimen/dp_3" />
</LinearLayout>
</FrameLayout>
......
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
<ImageView <ImageView
android:layout_marginTop="@dimen/dp_10"
android:layout_centerHorizontal="true"
android:src="@mipmap/icon_default_avatar"
android:id="@+id/iv_actor" android:id="@+id/iv_actor"
android:layout_width="@dimen/dp_42" android:layout_width="@dimen/dp_42"
android:layout_height="@dimen/dp_42" /> android:layout_height="@dimen/dp_42"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_10"
android:src="@mipmap/icon_default_avatar" />
<ImageView <ImageView
android:layout_marginTop="-10dp" android:layout_marginTop="-10dp"
......
...@@ -15,8 +15,7 @@ ...@@ -15,8 +15,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="@dimen/dp_10" >
android:paddingEnd="@dimen/dp_10">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
...@@ -102,42 +101,53 @@ ...@@ -102,42 +101,53 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
android:paddingStart="@dimen/dp_10" >
android:paddingEnd="@dimen/dp_10">
<LinearLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:id="@+id/ll_left"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_center"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_weight="1"
android:gravity="end"> android:gravity="end">
<ImageView
android:id="@+id/iv_home"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/dp_5"
tools:src="@mipmap/match_subscribe" />
<TextView <TextView
android:id="@+id/tv_home" android:id="@+id/tv_home"
android:maxEms="7"
android:maxLines="1"
android:ellipsize="end"
android:gravity="end"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:textColor="@color/text_normal5" android:textColor="@color/text_normal"
android:textSize="@dimen/sp_13" android:textSize="@dimen/sp_13"
android:layout_marginEnd="@dimen/dp_5"
tools:text="Academic普罗夫迪夫" />
<ImageView
android:id="@+id/iv_home"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
tools:text="帕森拉" /> tools:src="@mipmap/match_subscribe" />
</LinearLayout> </LinearLayout>
<TextView <TextView
android:layout_width="0dp" android:id="@+id/tv_center"
app:layout_constraintStart_toEndOf="@id/ll_left"
app:layout_constraintEnd_toStartOf="@id/ll_right"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_8" android:layout_marginStart="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_8" android:layout_marginEnd="@dimen/dp_8"
...@@ -149,32 +159,41 @@ ...@@ -149,32 +159,41 @@
android:textStyle="bold" /> android:textStyle="bold" />
<LinearLayout <LinearLayout
app:layout_constraintStart_toEndOf="@id/tv_center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:id="@+id/ll_right"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"> android:layout_weight="1">
<ImageView
android:id="@+id/iv_away"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
tools:src="@mipmap/match_subscribe" />
<TextView <TextView
android:layout_marginStart="@dimen/dp_5"
android:id="@+id/tv_away" android:id="@+id/tv_away"
android:maxEms="7"
android:ellipsize="end"
android:maxLines="1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:textColor="@color/text_normal5" android:textColor="@color/text_normal"
android:textSize="@dimen/sp_13" android:textSize="@dimen/sp_13"
tools:text="佩斯克" /> tools:text="佩斯克" />
<ImageView
android:id="@+id/iv_away"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center"
android:layout_marginStart="@dimen/dp_5"
tools:src="@mipmap/match_subscribe" />
</LinearLayout> </LinearLayout>
</LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout> </RelativeLayout>
......
...@@ -115,6 +115,7 @@ ...@@ -115,6 +115,7 @@
</LinearLayout> </LinearLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/info" android:id="@+id/info"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
...@@ -151,6 +152,7 @@ ...@@ -151,6 +152,7 @@
<!-- android:textSize="@dimen/sp_9" />--> <!-- android:textSize="@dimen/sp_9" />-->
<ImageView <ImageView
android:layout_marginEnd="@dimen/dp_10"
android:id="@+id/iv_subscribe" android:id="@+id/iv_subscribe"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="@dimen/dp_4"
app:cardPreventCornerOverlap="true"
app:cardUseCompatPadding="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/banner_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
<TextView
android:visibility="gone"
android:id="@+id/tv_title"
android:paddingStart="@dimen/dp_17"
android:paddingEnd="@dimen/dp_17"
android:textSize="@dimen/sp_13"
android:textColor="@color/white"
android:maxLines="1"
android:ellipsize="end"
tools:text="吹杨28分老鹰轻取魔术 罗斯18+7+8"
android:layout_alignParentBottom="true"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_35">
</TextView>
</RelativeLayout>
</androidx.cardview.widget.CardView>
</RelativeLayout>
\ No newline at end of file
...@@ -15,13 +15,13 @@ ...@@ -15,13 +15,13 @@
android:layout_height="match_parent"> android:layout_height="match_parent">
<!-- 返回箭头--> <!-- 返回箭头-->
<ImageView <ImageView
android:padding="@dimen/dp_10"
android:id="@+id/iv_left_icon" android:id="@+id/iv_left_icon"
android:layout_width="@dimen/dp_30"
android:layout_height="36dp"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:padding="@dimen/dp_10"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@mipmap/icon_live_back_black" android:src="@mipmap/icon_live_back_black" />
android:layout_width="@dimen/dp_30"
android:layout_height="36dp" />
<!-- 标题--> <!-- 标题-->
<TextView <TextView
tools:text="标题" tools:text="标题"
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
<string name="string_carefully_time">%s发布</string> <string name="string_carefully_time">%s发布</string>
<string name="string_share_count">%s次</string> <string name="string_share_count">%s次</string>
<string name="string_sign_success">已连续%d天签到成功</string> <string name="string_sign_success">已连续%d天签到成功</string>
<string name="string_sign_success_tes">已经连续登%d天</string> <string name="string_sign_success_tes">已经连续登%d天</string>
<string name="string_share_friend_text">每邀请1人送3天会员10万部无限观看\n邀请好友注册,TA充值,你赚钱\n最高可获得90%%收益\n%1$s</string> <string name="string_share_friend_text">每邀请1人送3天会员10万部无限观看\n邀请好友注册,TA充值,你赚钱\n最高可获得90%%收益\n%1$s</string>
<string name="string_share_content_text">亚洲最新萝莉御姐唯美海量高清视频,每日更新,真人1对1陪玩,还有现金红包领不停,快来看吧%s</string> <string name="string_share_content_text">亚洲最新萝莉御姐唯美海量高清视频,每日更新,真人1对1陪玩,还有现金红包领不停,快来看吧%s</string>
<string name="string_vip_card">VIP身份卡</string> <string name="string_vip_card">VIP身份卡</string>
...@@ -104,13 +104,13 @@ ...@@ -104,13 +104,13 @@
<string name="string_user_agreement_title_private">隐私协议</string> <string name="string_user_agreement_title_private">隐私协议</string>
<string name="string_user_agreement">1. 重要须知 <string name="string_user_agreement">1. 重要须知
\n\n1.1、本用户使用许可协议(下称“协议”或“本协议”)是用户与M直播公司旗下“红杉直播”视频直播平台(下称红杉直播)之间关于注册、登录“M直播”视频直播平台(下称“视频直播平台”或“平台”)以及使用平台服务所订立的协议,本协议约定了M直播与用户之间关于“M直播”服务方面的权利义务。 “用户”是指注册、登录、使用、浏览、获取本协议项下服务的个人或组织。 \n\n1.1、本用户使用许可协议(下称“协议”或“本协议”)是用户与M直播公司旗下“M直播”视频直播平台(下称M直播)之间关于注册、登录“M直播”视频直播平台(下称“视频直播平台”或“平台”)以及使用平台服务所订立的协议,本协议约定了M直播与用户之间关于“M直播”服务方面的权利义务。 “用户”是指注册、登录、使用、浏览、获取本协议项下服务的个人或组织。
\n\n1.2、用户应认真阅读(未成年人应当在监护人陪同下阅读)、充分理解本协议中各条款,特别是免除或者限制M直播责任的免责条款及对用户的权利限制条款,并选择接受或不接受本协议。除非用户接受本协议所有条款,否则用户无权注册、登录或使用M直播为用户提供的服务。用户的注册、登录、使用等行为将视为对本协议的接受,并同意接受本协议各项条款的约束。 \n\n1.2、用户应认真阅读(未成年人应当在监护人陪同下阅读)、充分理解本协议中各条款,特别是免除或者限制M直播责任的免责条款及对用户的权利限制条款,并选择接受或不接受本协议。除非用户接受本协议所有条款,否则用户无权注册、登录或使用M直播为用户提供的服务。用户的注册、登录、使用等行为将视为对本协议的接受,并同意接受本协议各项条款的约束。
\n\n1.3、通过访问和/或使用M直播,用户表示同意接受本协议的所有条件和条款。M直播是面向最终用户提供播客实时在线演绎、互动直播等服务的网站。如果用户不愿接受本协议的全部条件和条款,请用户不要访问或使用M直播。如果用户愿意接受本协议,则意味着用户了解及完全同意本协议的各项内容,以及M直播对本协议及本协议附件随时所做的任何修改。 \n\n1.3、通过访问和/或使用M直播,用户表示同意接受本协议的所有条件和条款。M直播是面向最终用户提供播客实时在线演绎、互动直播等服务的网站。如果用户不愿接受本协议的全部条件和条款,请用户不要访问或使用M直播。如果用户愿意接受本协议,则意味着用户了解及完全同意本协议的各项内容,以及M直播对本协议及本协议附件随时所做的任何修改。
\n\n1.4、本协议下的条款可由M直播随时变更,用户须定期审阅本协议。协议条款一旦发生变动,M直播将会在网站相关的页面上发布。变更后的协议在相关的页面上公布即有效代替原来的协议,恕不再另行通知。用户如不同意M直播对本协议的所作的任何变更,应立即停止使用M直播提供的服务。如用户在本协议变更后继续使用M直播的服务,即视作用户已完全同意变更后的协议。 \n\n1.4、本协议下的条款可由M直播随时变更,用户须定期审阅本协议。协议条款一旦发生变动,M直播将会在网站相关的页面上发布。变更后的协议在相关的页面上公布即有效代替原来的协议,恕不再另行通知。用户如不同意M直播对本协议的所作的任何变更,应立即停止使用M直播提供的服务。如用户在本协议变更后继续使用M直播的服务,即视作用户已完全同意变更后的协议。
\n\n1.5、请注意:鉴于用户使用网络服务之习惯,用户有权利且有义务自使用M直播服务之日起每月自行主动对本协议之全部内容进行重新阅读,鉴于上述约定,用户因自身怠于行使该等权利或怠于履行该等义务的,无权以未获知上述内容而对相关条款的法律效力提出异议。 \n\n1.5、请注意:鉴于用户使用网络服务之习惯,用户有权利且有义务自使用M直播服务之日起每月自行主动对本协议之全部内容进行重新阅读,鉴于上述约定,用户因自身怠于行使该等权利或怠于履行该等义务的,无权以未获知上述内容而对相关条款的法律效力提出异议。
\n\n2. 服务内容 \n\n2. 服务内容
\n\n2.1、本用户使用许可协议(下称“协议”或“本协议”)是用户与M直播公司旗下“红杉直播”视频直播平台(下称红杉直播)之间关于注册、登录“M直播”视频直播平台(下称“视频直播平台”或“平台”)以及使用平台服务所订立的协议,本协议约定了M直播与用户之间关于“M直播”服务方面的权利义务。 “用户”是指注册、登录、使用、浏览、获取本协议项下服务的个人或组织。 \n\n2.1、本用户使用许可协议(下称“协议”或“本协议”)是用户与M直播公司旗下“M直播”视频直播平台(下称M直播)之间关于注册、登录“M直播”视频直播平台(下称“视频直播平台”或“平台”)以及使用平台服务所订立的协议,本协议约定了M直播与用户之间关于“M直播”服务方面的权利义务。 “用户”是指注册、登录、使用、浏览、获取本协议项下服务的个人或组织。
\n\n2.2、用户应认真阅读(未成年人应当在监护人陪同下阅读)、充分理解本协议中各条款,特别是免除或者限制M直播责任的免责条款及对用户的权利限制条款,并选择接受或不接受本协议。除非用户接受本协议所有条款,否则用户无权注册、登录或使用M直播为用户提供的服务。用户的注册、登录、使用等行为将视为对本协议的接受,并同意接受本协议各项条款的约束。 \n\n2.2、用户应认真阅读(未成年人应当在监护人陪同下阅读)、充分理解本协议中各条款,特别是免除或者限制M直播责任的免责条款及对用户的权利限制条款,并选择接受或不接受本协议。除非用户接受本协议所有条款,否则用户无权注册、登录或使用M直播为用户提供的服务。用户的注册、登录、使用等行为将视为对本协议的接受,并同意接受本协议各项条款的约束。
\n\n2.3、通过访问和/或使用M直播,用户表示同意接受本协议的所有条件和条款。M直播是面向最终用户提供播客实时在线演绎、互动直播等服务的网站。如果用户不愿接受本协议的全部条件和条款,请用户不要访问或使用M直播。如果用户愿意接受本协议,则意味着用户了解及完全同意本协议的各项内容,以及M直播对本协议及本协议附件随时所做的任何修改。 \n\n2.3、通过访问和/或使用M直播,用户表示同意接受本协议的所有条件和条款。M直播是面向最终用户提供播客实时在线演绎、互动直播等服务的网站。如果用户不愿接受本协议的全部条件和条款,请用户不要访问或使用M直播。如果用户愿意接受本协议,则意味着用户了解及完全同意本协议的各项内容,以及M直播对本协议及本协议附件随时所做的任何修改。
\n\n2.4、本协议下的条款可由M直播随时变更,用户须定期审阅本协议。协议条款一旦发生变动,M直播将会在网站相关的页面上发布。变更后的协议在相关的页面上公布即有效代替原来的协议,恕不再另行通知。用户如不同意M直播对本协议的所作的任何变更,应立即停止使用M直播提供的服务。如用户在本协议变更后继续使用M直播的服务,即视作用户已完全同意变更后的协议。 \n\n2.4、本协议下的条款可由M直播随时变更,用户须定期审阅本协议。协议条款一旦发生变动,M直播将会在网站相关的页面上发布。变更后的协议在相关的页面上公布即有效代替原来的协议,恕不再另行通知。用户如不同意M直播对本协议的所作的任何变更,应立即停止使用M直播提供的服务。如用户在本协议变更后继续使用M直播的服务,即视作用户已完全同意变更后的协议。
...@@ -118,16 +118,16 @@ ...@@ -118,16 +118,16 @@
<string name="string_user_private"> <string name="string_user_private">
隐私政策 隐私政策
\n\n欢迎您使用红杉直播提供的服务! \n\n欢迎您使用M直播提供的服务!
\n\nM直播公司(以下简称“ 我们 ”)是红杉直播的开发者和运营者,非常重视用户的隐私和个人信息保护。我们深知个人信息对您的重要性,并会尽全力保护您个人信息的安全。您在使用我们的产品或服务时,我们可能会收集和使用您的相关信息。我们希望通过《隐私政策》(“本隐私政策”)向您说明我们在您使用我们的产品或服务时如何收集、使用、保护这些信息。 本隐私政策不适用于其他独立第三方向您提供的服务,例如我们平台上的第三方依托我们平台向您提供服务时,您向第三方提供的个人信息不适用于本隐私政策,我们对任何第三方使用由您提供的信息不承担任何责任。 \n\nM直播公司(以下简称“ 我们 ”)是M直播的开发者和运营者,非常重视用户的隐私和个人信息保护。我们深知个人信息对您的重要性,并会尽全力保护您个人信息的安全。您在使用我们的产品或服务时,我们可能会收集和使用您的相关信息。我们希望通过《隐私政策》(“本隐私政策”)向您说明我们在您使用我们的产品或服务时如何收集、使用、保护这些信息。 本隐私政策不适用于其他独立第三方向您提供的服务,例如我们平台上的第三方依托我们平台向您提供服务时,您向第三方提供的个人信息不适用于本隐私政策,我们对任何第三方使用由您提供的信息不承担任何责任。
在使用红杉直播产品和服务前,请您务必仔细阅读并透彻理解本隐私政策,在确认充分理解并同意后使用相关产品或服务。如果您不同意本隐私政策任何内容,您应立即停止使用红杉直播服务。若您使用红杉直播的产品或服务,即表示您已充分理解并同意我们在本隐私政策中所述内容。 在使用M直播产品和服务前,请您务必仔细阅读并透彻理解本隐私政策,在确认充分理解并同意后使用相关产品或服务。如果您不同意本隐私政策任何内容,您应立即停止使用M直播服务。若您使用M直播的产品或服务,即表示您已充分理解并同意我们在本隐私政策中所述内容。
\n\n第一部分 定义 \n\n第一部分 定义
\n\n1、您:本隐私政策的“您 ” 特指使用红杉直播产品或服务的用户。 \n\n1、您:本隐私政策的“您 ” 特指使用M直播产品或服务的用户。
\n\n2、个人信息:本隐私的个人信息指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。本隐私政策中涉及的个人信息包括:基本信息(包括个人姓名、生日、性别、住址、个人电话号码、电子邮箱);个人身份信息(包括身份证信息);个人形象,声音和画面;网络身份标识信息(包括系统账号、IP地址、邮箱地址及与前述有关的密码、口令、口令保护答案);个人财产信息(交易和消费记录以及球钻、球票虚拟财产信息);通讯录;个人上网记录(包括网站浏览记录、软件使用记录、点击记录);个人常用设备信息(包括硬件型号、设备 网络地址、操作系统类型、软件列表唯一设备识别码(如IMEI/android ID/IDFA/OPENUDID/GUID/SIM卡/IMSI信息在内的描述个人常用设备基本情况的信息);个人位置信息(GPS/WIFI精准定位信息)。 \n\n2、个人信息:本隐私的个人信息指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。本隐私政策中涉及的个人信息包括:基本信息(包括个人姓名、生日、性别、住址、个人电话号码、电子邮箱);个人身份信息(包括身份证信息);个人形象,声音和画面;网络身份标识信息(包括系统账号、IP地址、邮箱地址及与前述有关的密码、口令、口令保护答案);个人财产信息(交易和消费记录以及球钻、球票虚拟财产信息);通讯录;个人上网记录(包括网站浏览记录、软件使用记录、点击记录);个人常用设备信息(包括硬件型号、设备 网络地址、操作系统类型、软件列表唯一设备识别码(如IMEI/android ID/IDFA/OPENUDID/GUID/SIM卡/IMSI信息在内的描述个人常用设备基本情况的信息);个人位置信息(GPS/WIFI精准定位信息)。
\n\n3、个人敏感信息:指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇个人信息。个人敏感信息包括身份证件号码、个人生物识别信息、银行账号、通信记录和内容、财产信息、交易信息、14岁以下(含)未成年人的个人信息。 \n\n3、个人敏感信息:指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇个人信息。个人敏感信息包括身份证件号码、个人生物识别信息、银行账号、通信记录和内容、财产信息、交易信息、14岁以下(含)未成年人的个人信息。
\n\n4、红杉直播产品与服务: 指我们出品或运营的各项软件产品和网络服务,包括但不限于构成红杉直播直播平台的软件与服务。 \n\n4、M直播产品与服务: 指我们出品或运营的各项软件产品和网络服务,包括但不限于构成M直播直播平台的软件与服务。
\n\n5、红杉直播账号: 指红杉直播产品与服务的相关账号。 \n\n5、M直播账号: 指M直播产品与服务的相关账号。
\n\n6、红杉直播平台: 指提供红杉直播产品与服务的各个平台,包括网站、安卓移动端软件、苹果移动端软件。 \n\n6、M直播平台: 指提供M直播产品与服务的各个平台,包括网站、安卓移动端软件、苹果移动端软件。
\n\n第二部分   隐私政策 \n\n第二部分   隐私政策
\n\n本政策将帮助您了解以下内容: \n\n本政策将帮助您了解以下内容:
\n一、我们如何收集您的个人信息 \n一、我们如何收集您的个人信息
...@@ -145,23 +145,23 @@ ...@@ -145,23 +145,23 @@
\n\n我们根据合法、正当、必要的原则,为实现本政策下述的各项功能,收集和使用您的个人信息: \n\n我们根据合法、正当、必要的原则,为实现本政策下述的各项功能,收集和使用您的个人信息:
\n\n(一)您向我们提供的信息。 \n\n(一)您向我们提供的信息。
\n\n1、您在我们平台或产品上注册账户时候提交的信息 \n\n1、您在我们平台或产品上注册账户时候提交的信息
当您注册或登录红杉直播账号时,您可以通过手机号创建账号,我们将通过发送短信验证码来验证您的身份是否有效,您可以主动完善相关的网络身份识别信息(如头像、昵称和密码),可以填写个人简介标签信息来完善您的个人资料。 当您注册或登录M直播账号时,您可以通过手机号创建账号,我们将通过发送短信验证码来验证您的身份是否有效,您可以主动完善相关的网络身份识别信息(如头像、昵称和密码),可以填写个人简介标签信息来完善您的个人资料。
您也可以使用第三方账号(如微信)登录红杉直播平台,此时您将授权我们获取您在第三方平台上的公开信息(头像、昵称),并将您的该第三方账号与您的红杉直播账号绑定,使您可以通过该第三方账号直接登录并使用红杉直播的产品与服务。完成注册后, 您将能够以注册用户身份在红杉直播平台上使用观看直播、发送弹幕、留言评论功能。如果您不同意授权或拒绝我们获取上述信息,您仍可在红杉直播平台上以游客身份观看直播或进行浏览,但将无法在享受其他注册用户的功能和服务。 您也可以使用第三方账号(如微信)登录M直播平台,此时您将授权我们获取您在第三方平台上的公开信息(头像、昵称),并将您的该第三方账号与您的M直播账号绑定,使您可以通过该第三方账号直接登录并使用M直播的产品与服务。完成注册后, 您将能够以注册用户身份在M直播平台上使用观看直播、发送弹幕、留言评论功能。如果您不同意授权或拒绝我们获取上述信息,您仍可在M直播平台上以游客身份观看直播或进行浏览,但将无法在享受其他注册用户的功能和服务。
在您使用直播相关功能或服务时(包括但不限于提供直播、使用直播打赏功能、提现服务)时,根据国家相关的法律法规, 您需要提供您的真实身份信息(真实姓名、身份证号)、面部信息( 用于腾讯云人脸识别)以完成实名验证。 这些信息属于个人敏感信息,我们将会尽可能的保护您个人敏感信息的安全。如果您不提供这些信息,您将不能使用直播功能或服务,但不影响您在红杉直播平台上享受视频浏览以及注册用户的基础服务。未成年人用户不得使用红杉直播平台上的打赏功能及服务。 在您使用直播相关功能或服务时(包括但不限于提供直播、使用直播打赏功能、提现服务)时,根据国家相关的法律法规, 您需要提供您的真实身份信息(真实姓名、身份证号)、面部信息( 用于腾讯云人脸识别)以完成实名验证。 这些信息属于个人敏感信息,我们将会尽可能的保护您个人敏感信息的安全。如果您不提供这些信息,您将不能使用直播功能或服务,但不影响您在M直播平台上享受视频浏览以及注册用户的基础服务。未成年人用户不得使用M直播平台上的打赏功能及服务。
\n\n2、您在使用红杉直播产品与服务时填写或提交的信息,包括您的姓名、性别、出生年月日、身份证号码、电话号码、电子邮箱、银行账号。 \n\n2、您在使用M直播产品与服务时填写或提交的信息,包括您的姓名、性别、出生年月日、身份证号码、电话号码、电子邮箱、银行账号。
请注意: 我们的多项服务,可让您不仅与自己的社交网络分享信息,也与使用该服务的所有用户公开分享您的相关信息,例如,您在我们平台上传或发布的信息(包括您公开的个人信息、您建立的名单)、您对其他人上传或发布的信息作出的回应,以及包括与这些信息有关的位置数据、视频、音频信息。使用我们服务的其他用户也有可能分享与您有关的信息(包括位置数据、视频、音频信息)。特别是,我们的社交媒体服务,是专为使您与世界各地的用户共享信息而设计,您可以使共享信息实时、广泛地传递。 只要您不删除共享信息,有关信息会一直留存在公共领域;即使您删除共享信息,有关信息仍可能由其他用户或不受我们控制的非关联第三方独立地缓存、复制或储存,或由其他用户或第三方在公共领域保存。 请注意: 我们的多项服务,可让您不仅与自己的社交网络分享信息,也与使用该服务的所有用户公开分享您的相关信息,例如,您在我们平台上传或发布的信息(包括您公开的个人信息、您建立的名单)、您对其他人上传或发布的信息作出的回应,以及包括与这些信息有关的位置数据、视频、音频信息。使用我们服务的其他用户也有可能分享与您有关的信息(包括位置数据、视频、音频信息)。特别是,我们的社交媒体服务,是专为使您与世界各地的用户共享信息而设计,您可以使共享信息实时、广泛地传递。 只要您不删除共享信息,有关信息会一直留存在公共领域;即使您删除共享信息,有关信息仍可能由其他用户或不受我们控制的非关联第三方独立地缓存、复制或储存,或由其他用户或第三方在公共领域保存。
因此,请您谨慎考虑通过红杉直播产品与服务上传、发布和交流的信息内容。在一些情况下,您可通过我们某些服务的隐私设定来控制有权浏览您共享信息的用户范围。如要求从我们的服 因此,请您谨慎考虑通过M直播产品与服务上传、发布和交流的信息内容。在一些情况下,您可通过我们某些服务的隐私设定来控制有权浏览您共享信息的用户范围。如要求从我们的服
务中删除您的相关信息,请和我们取得联系。 务中删除您的相关信息,请和我们取得联系。
\n\n(二)在您使用服务过程中收集的信息。 \n\n(二)在您使用服务过程中收集的信息。
\n\n为了更好的为您提供服务,我们会收集您的相关信息,这类信息包括: \n\n为了更好的为您提供服务,我们会收集您的相关信息,这类信息包括:
\n\n1、为保障您正常使用红杉直播平台的基础功能和正常服务、改进及优化我们的服务体验、保障您的帐号安全, 我们会自动接收并记录您的浏览器、计算机、移动设备的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您的网页记录数据 ;如您下载或使用我们或我们关联公司客户端软件,或访问移动网页使用我们平台的服务时,我们可能会读取与您位置和移动设备相关的信息,包括但不限于设备型号、设备识别码、操作系统、分辨率、电信运营商。请您了解,这些信息是我们提供服务和保障服务正常运行所必须收集的基本信息。 \n\n1、为保障您正常使用M直播平台的基础功能和正常服务、改进及优化我们的服务体验、保障您的帐号安全, 我们会自动接收并记录您的浏览器、计算机、移动设备的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您的网页记录数据 ;如您下载或使用我们或我们关联公司客户端软件,或访问移动网页使用我们平台的服务时,我们可能会读取与您位置和移动设备相关的信息,包括但不限于设备型号、设备识别码、操作系统、分辨率、电信运营商。请您了解,这些信息是我们提供服务和保障服务正常运行所必须收集的基本信息。
\n\n2、我们会收集您通过红杉直播平台自行上传或发布的内容、信息,例如文字、共享照片、录音、录像及该类信息的日期、时间或地点。当您使用上述功能时,我们会向您请求授权相机、照片、麦克风权限和设备所在位置信息权限。您可以自行选择是否向我们提供该授权,如果拒绝,将无法使用此项功能,但不影响您使用红杉直播平台的其他功能。 \n\n2、我们会收集您通过M直播平台自行上传或发布的内容、信息,例如文字、共享照片、录音、录像及该类信息的日期、时间或地点。当您使用上述功能时,我们会向您请求授权相机、照片、麦克风权限和设备所在位置信息权限。您可以自行选择是否向我们提供该授权,如果拒绝,将无法使用此项功能,但不影响您使用M直播平台的其他功能。
\n\n3、为向您提供个性化内容展示和推送,提高用户体验,我们会收集如下信息: \n\n3、为向您提供个性化内容展示和推送,提高用户体验,我们会收集如下信息:
\n\n(1)关注、搜索、浏览记录您的操作、使用行为信息;为此,我们会收集您使用红杉直播平台时的设备信息,包括设备型号、、设备的MAC地址、唯一设备标识符、操作系统、分辨率、电信运营商软硬件信息。 \n\n(1)关注、搜索、浏览记录您的操作、使用行为信息;为此,我们会收集您使用M直播平台时的设备信息,包括设备型号、、设备的MAC地址、唯一设备标识符、操作系统、分辨率、电信运营商软硬件信息。
\n\n(2)反馈、发布、点赞、评论、打赏,您主动提供的互动信息会存储在我们的服务器中; \n\n(2)反馈、发布、点赞、评论、打赏,您主动提供的互动信息会存储在我们的服务器中;
\n\n(3)获得您明示授权后的地理位置信息,该信息便我们基于您的地理位置为您切换到对应位置的直播服务。位置信息属于敏感信息,拒绝提供该信息仅会使您无法获得更好的直播服务,但不影响您正常使用其他功能。 \n\n(3)获得您明示授权后的地理位置信息,该信息便我们基于您的地理位置为您切换到对应位置的直播服务。位置信息属于敏感信息,拒绝提供该信息仅会使您无法获得更好的直播服务,但不影响您正常使用其他功能。
\n\n4、提供充值消费相关的功能或服务 \n\n4、提供充值消费相关的功能或服务
\n\n当您使用红杉直播产品与服务的消费功能时,我们会收集您的充值记录、消费记录信息, 以便您查询自己的交易记录,同时尽最大程度保护您的财产、虚拟财产安全。 上述信息属于敏感信息,但收集上述信息为实现相关功能所必须,否则将无法完成交易。 \n\n当您使用M直播产品与服务的消费功能时,我们会收集您的充值记录、消费记录信息, 以便您查询自己的交易记录,同时尽最大程度保护您的财产、虚拟财产安全。 上述信息属于敏感信息,但收集上述信息为实现相关功能所必须,否则将无法完成交易。
\n\n5、除上述信息外,为了改进服务质量,我们还可能收集您的其他信息,包括且并不限于您与我们的客户服务团队联系时您提供的相关信息,您参与问卷调查时向我们发送的问卷答复信息,以及您与我们的关联公司、合作方互动时提供的相关信息。与此同时,为提高您使用相关服务的安全性,更准确地预防钓鱼网站欺诈和木马病毒,我们可能会通过了解一些您的网络使用习惯、您常用的软件信息手段来判断您账户的风险,并可能会记录一些我们认为有风险的URL。 \n\n5、除上述信息外,为了改进服务质量,我们还可能收集您的其他信息,包括且并不限于您与我们的客户服务团队联系时您提供的相关信息,您参与问卷调查时向我们发送的问卷答复信息,以及您与我们的关联公司、合作方互动时提供的相关信息。与此同时,为提高您使用相关服务的安全性,更准确地预防钓鱼网站欺诈和木马病毒,我们可能会通过了解一些您的网络使用习惯、您常用的软件信息手段来判断您账户的风险,并可能会记录一些我们认为有风险的URL。
\n\n(三)我们从第三方获得您个人信息的情形。 \n\n(三)我们从第三方获得您个人信息的情形。
\n\n为了给您提供更好的服务或为了预防互联网犯罪,我们的关联公司、合作伙伴会依据法律法规、监管政策的规定或征得您同意的前提下,向我们分享您的个人信息。 我们可能从第三方获取您授权共享的账户信息(头像、昵称) ,并在您同意本隐私政策后将您的第三方账户与您的账户绑定,使您可以通过第三方账户直接登录并使用我们的产品或服务。我们会将依据与第三方的约定、对个人信息来源的合法性进行确认后,在符合相关法律法规、监管政策规定的前提下,使用您的这些个人信息。 \n\n为了给您提供更好的服务或为了预防互联网犯罪,我们的关联公司、合作伙伴会依据法律法规、监管政策的规定或征得您同意的前提下,向我们分享您的个人信息。 我们可能从第三方获取您授权共享的账户信息(头像、昵称) ,并在您同意本隐私政策后将您的第三方账户与您的账户绑定,使您可以通过第三方账户直接登录并使用我们的产品或服务。我们会将依据与第三方的约定、对个人信息来源的合法性进行确认后,在符合相关法律法规、监管政策规定的前提下,使用您的这些个人信息。
...@@ -170,8 +170,8 @@ ...@@ -170,8 +170,8 @@
\n\n信息获取 目的/用途 \n\n信息获取 目的/用途
 \n\n友盟(北京锐讯灵通科技有限公司) SDK或API版本、平台、时间戳、应用标识符、应用程序版本、应用分发渠道、网卡(MAC)地址、设备型号、终端制造厂商、终端设备操作系统版本、应用使用时长、语言所在地、时区和网络状态(WiFi) 用于用户数据的统计分析和平台行为数据埋点统计  \n\n友盟(北京锐讯灵通科技有限公司) SDK或API版本、平台、时间戳、应用标识符、应用程序版本、应用分发渠道、网卡(MAC)地址、设备型号、终端制造厂商、终端设备操作系统版本、应用使用时长、语言所在地、时区和网络状态(WiFi) 用于用户数据的统计分析和平台行为数据埋点统计
 \n\n阿里云OSS(阿里云计算有限公司)  网络访问、访问网络状态、访问WIFI状态、写入储存权限 实时云数据存储,提供用户反馈功能  \n\n阿里云OSS(阿里云计算有限公司)  网络访问、访问网络状态、访问WIFI状态、写入储存权限 实时云数据存储,提供用户反馈功能
\n\n红杉直播APP权限获取说明:  \n\nM直播APP权限获取说明: 
\n\n在您使用红杉直播的部分功能和/或服务可能需要您自行开启以下权限。您有权自行决定开启或关闭这些权限,开启即代表您授权红杉直播可以收集和使用这些信息来实现相关功能。如果您不使用这些功能和/或服务,您可以选择不开启或者关闭,红杉直播不会收集该部分信息,且关闭不影响基本业务功能使用。与权限获取场景所涉及的个人信息处理或平台功能相关更详细的情况及处理规则,以本政策为补充。 \n\n在您使用M直播的部分功能和/或服务可能需要您自行开启以下权限。您有权自行决定开启或关闭这些权限,开启即代表您授权M直播可以收集和使用这些信息来实现相关功能。如果您不使用这些功能和/或服务,您可以选择不开启或者关闭,M直播不会收集该部分信息,且关闭不影响基本业务功能使用。与权限获取场景所涉及的个人信息处理或平台功能相关更详细的情况及处理规则,以本政策为补充。
\n\n(1)定位信息:开启定位信息,为方便您在使用社区发布消息和推荐附近新闻时获取当前位置。 \n\n(1)定位信息:开启定位信息,为方便您在使用社区发布消息和推荐附近新闻时获取当前位置。
\n\n(2)使用相机:开启相机权限,为向您扫一扫和社区发布内容上传图片相关功能。 \n\n(2)使用相机:开启相机权限,为向您扫一扫和社区发布内容上传图片相关功能。
\n\n(3)读取短信/彩信信息:获取用户短信内验证码,一键登录功能。 \n\n(3)读取短信/彩信信息:获取用户短信内验证码,一键登录功能。
...@@ -195,10 +195,10 @@ ...@@ -195,10 +195,10 @@
\n\n9、经您许可的其他用途。 \n\n9、经您许可的其他用途。
\n\n三、我们如何委托处理、共享、转让、公开披露您的信息 \n\n三、我们如何委托处理、共享、转让、公开披露您的信息
\n\n(一)委托处理 \n\n(一)委托处理
红杉直播平台上提供的直播业务功能中某些具体的模块或功能由外部供应商提供。例如 我们会聘请服务提供商来协助我们对实名认证用户完成人脸识别 。 M直播平台上提供的直播业务功能中某些具体的模块或功能由外部供应商提供。例如 我们会聘请服务提供商来协助我们对实名认证用户完成人脸识别 。
对我们委托处理个人信息的公司、组织和个人,我们会与其签署严格的保密协定,要求他们按照我们的要求、本隐私政策以及其他任何相关的保密和安全措施来处理个人信息。 对我们委托处理个人信息的公司、组织和个人,我们会与其签署严格的保密协定,要求他们按照我们的要求、本隐私政策以及其他任何相关的保密和安全措施来处理个人信息。
\n\n(二)共享 \n\n(二)共享
\n\n1、与关联公司间共享:为便于我们基于红杉直播账户向您提供产品和服务,推荐您可能感兴趣的信息,识别会员账号异常,保护红杉直播关联公司或其他用户或公众的人身财产安全免遭侵害,您的个人信息可能会与我们的关联公司和/或其指定的服务提供商共享。我们只会共享必要的个人信息,且受本隐私政策中所声明目的的约束,如果我们共享您的个人敏感信息或关联公司改变个人信息的使用及处理目的,将再次征求您的授权同意; \n\n1、与关联公司间共享:为便于我们基于M直播账户向您提供产品和服务,推荐您可能感兴趣的信息,识别会员账号异常,保护M直播关联公司或其他用户或公众的人身财产安全免遭侵害,您的个人信息可能会与我们的关联公司和/或其指定的服务提供商共享。我们只会共享必要的个人信息,且受本隐私政策中所声明目的的约束,如果我们共享您的个人敏感信息或关联公司改变个人信息的使用及处理目的,将再次征求您的授权同意;
\n\n2、与授权合作伙伴共享:我们可能委托授权合作伙伴为您提供某些服务或代表我们履行职能,我们仅会出于本隐私政策声明的合法、正当、必要、特定、明确的目的共享您的信息,授权合作伙伴只能接触到其履行职责所需信息,且不得将此信息用于其他任何目的。 \n\n2、与授权合作伙伴共享:我们可能委托授权合作伙伴为您提供某些服务或代表我们履行职能,我们仅会出于本隐私政策声明的合法、正当、必要、特定、明确的目的共享您的信息,授权合作伙伴只能接触到其履行职责所需信息,且不得将此信息用于其他任何目的。
\n\n目前,我们的授权合作伙伴包括以下类型: \n\n目前,我们的授权合作伙伴包括以下类型:
\n\n(1)广告、分析服务类的授权合作伙伴。除非得到您的许可,否则我们不会将您的个人身份信息与提供广告、分析服务的合作伙伴共享。我们会向这些合作伙伴提供有关其广告覆盖面和有效性的信息,但不会提供您的个人身份信息,或者我们将这些信息进行汇总,以便它不会识别您个人。这类合作伙伴可能将上述信息与他们合法获取的其他数据相结合,以进行广告或决策建议; \n\n(1)广告、分析服务类的授权合作伙伴。除非得到您的许可,否则我们不会将您的个人身份信息与提供广告、分析服务的合作伙伴共享。我们会向这些合作伙伴提供有关其广告覆盖面和有效性的信息,但不会提供您的个人身份信息,或者我们将这些信息进行汇总,以便它不会识别您个人。这类合作伙伴可能将上述信息与他们合法获取的其他数据相结合,以进行广告或决策建议;
...@@ -212,12 +212,12 @@ ...@@ -212,12 +212,12 @@
\n\n(四)公开披露 \n\n(四)公开披露
\n\n我们仅会在以下情况下,公开披露您的个人信息: \n\n我们仅会在以下情况下,公开披露您的个人信息:
\n\n1、获得您明确同意或基于您的主动选择,我们可能会公开披露您的个人信息; \n\n1、获得您明确同意或基于您的主动选择,我们可能会公开披露您的个人信息;
\n\n2、如果我们确定您出现违反法律法规、监管政策或严重违反红杉直播平台相关协议及规则的情况,或为保护其他用户或公众的人身财产安全免遭侵害,我们可能依据法律法规、监管政策或征得您同意的情况下披露关于您的个人信息,包括相关违规行为以及红杉直播平台已对您采取的措施。 \n\n2、如果我们确定您出现违反法律法规、监管政策或严重违反M直播平台相关协议及规则的情况,或为保护其他用户或公众的人身财产安全免遭侵害,我们可能依据法律法规、监管政策或征得您同意的情况下披露关于您的个人信息,包括相关违规行为以及M直播平台已对您采取的措施。
\n\n3、法律强制性规定或者有权的行政或司法机关依法要求我们应当披露您的个人信息时。 \n\n3、法律强制性规定或者有权的行政或司法机关依法要求我们应当披露您的个人信息时。
\n\n四、我们如何保存和保护您的个人信息 \n\n四、我们如何保存和保护您的个人信息
\n\n(一) 您个人信息的保存 \n\n(一) 您个人信息的保存
\n\n1、保存期限 \n\n1、保存期限
\n\n您在使用红杉直播产品与服务期间,我们将持续为您保存您的个人信息。如果您注销帐户或主动删除上述信息,我们将依据《网络安全法》等法律法规、监管政策的规定保存您的信息。在您注销帐户或主动删除上述信息后,我们不会再对您的个人信息进行商业化使用,但我们可能会对您的个人信息进行匿名化处理后使用。 \n\n您在使用M直播产品与服务期间,我们将持续为您保存您的个人信息。如果您注销帐户或主动删除上述信息,我们将依据《网络安全法》等法律法规、监管政策的规定保存您的信息。在您注销帐户或主动删除上述信息后,我们不会再对您的个人信息进行商业化使用,但我们可能会对您的个人信息进行匿名化处理后使用。
\n\n2、保存地域 \n\n2、保存地域
\n\n您的个人信息均储存于可适用的法律所允许的地理位置,以来自中国大陆地区的用户为例,其个人信息均会被存储在位于中国大陆地区的服务器上。除非法律要求或许可,我们不会对您的个人信息进行跨境传输。如果您使用VPN或可能隐藏您真实地理位置的技术,或者遇到域名或IP地址解析不准确的客观情况,您可能会被连接到上述地理位置以外的服务器上,此时您的个人信息将可能发生跨境传输。 \n\n您的个人信息均储存于可适用的法律所允许的地理位置,以来自中国大陆地区的用户为例,其个人信息均会被存储在位于中国大陆地区的服务器上。除非法律要求或许可,我们不会对您的个人信息进行跨境传输。如果您使用VPN或可能隐藏您真实地理位置的技术,或者遇到域名或IP地址解析不准确的客观情况,您可能会被连接到上述地理位置以外的服务器上,此时您的个人信息将可能发生跨境传输。
\n\n(二)您个人信息的保护 \n\n(二)您个人信息的保护
...@@ -237,14 +237,14 @@ ...@@ -237,14 +237,14 @@
\n\n您可以在使用我们服务的过程中,访问、修改和删除您提供的注册信息和其他个人信息。您访问、修改和删除个人信息的范围和方式将取决于您使用的具体服务。 \n\n您可以在使用我们服务的过程中,访问、修改和删除您提供的注册信息和其他个人信息。您访问、修改和删除个人信息的范围和方式将取决于您使用的具体服务。
\n\n我们将按照本隐私政策所述,仅为实现我们产品或服务的功能,收集、使用您的信息。如您发现我们违反法律、行政法规的规定或者双方的约定收集、使用您的个人信息,您可以要求我们删除。如您发现我们收集、存储的您的个人信息有错误的,您也可以要求我们更正。 \n\n我们将按照本隐私政策所述,仅为实现我们产品或服务的功能,收集、使用您的信息。如您发现我们违反法律、行政法规的规定或者双方的约定收集、使用您的个人信息,您可以要求我们删除。如您发现我们收集、存储的您的个人信息有错误的,您也可以要求我们更正。
\n\n您可以通过以下方式访问、修改或删除自己的信息: \n\n您可以通过以下方式访问、修改或删除自己的信息:
\n\n1、登录红杉直播客户端App,进入“个人中心”→“我的资料”,对个人资料信息进行访问、修改或删除; \n\n1、登录M直播客户端App,进入“个人中心”→“我的资料”,对个人资料信息进行访问、修改或删除;
\n\n2、登录红杉直播客户端App,进入“个人中心”→ (设置按钮),选择对应的设置选项,对账号与安全、隐私设置信息进行访问、修改或删除; \n\n2、登录M直播客户端App,进入“个人中心”→ (设置按钮),选择对应的设置选项,对账号与安全、隐私设置信息进行访问、修改或删除;
\n\n3、关于注销账户的特别说明: \n\n3、关于注销账户的特别说明:
\n\n(1)账号一旦注销,您将无法登录、使用该账号,也就是说您将无法再以此账号登录/使用/继续使用红杉直播的相关产品与服务; \n\n(1)账号一旦注销,您将无法登录、使用该账号,也就是说您将无法再以此账号登录/使用/继续使用M直播的相关产品与服务;
\n\n(2)账号一旦注销,您曾通过该账号登录、使用的产品与服务下的所有内容、信息、数据、记录将会被删除或匿名化处理,您也无法再检索、访问、获取、继续使用和找回,也无权要求我们找回(但法律法规另有规定或监管部门另有要求的除外),包括: 该账号下的个人资料(例如:头像、昵称)及绑定信息(例如:绑定手机号、邮箱); 该账号下的您的个人信息;该账号曾发表的所有内容(例如:图片、照片、评论、互动、点赞);其他所有内容、信息、数据、记录。 \n\n(2)账号一旦注销,您曾通过该账号登录、使用的产品与服务下的所有内容、信息、数据、记录将会被删除或匿名化处理,您也无法再检索、访问、获取、继续使用和找回,也无权要求我们找回(但法律法规另有规定或监管部门另有要求的除外),包括: 该账号下的个人资料(例如:头像、昵称)及绑定信息(例如:绑定手机号、邮箱); 该账号下的您的个人信息;该账号曾发表的所有内容(例如:图片、照片、评论、互动、点赞);其他所有内容、信息、数据、记录。
\n\n(3)账号一旦注销,您与我们曾签署过的相关用户协议、其他权利义务性文件等相应终止(但我们与您之间已约定继续生效的或法律法规另有规定的除外); \n\n(3)账号一旦注销,您与我们曾签署过的相关用户协议、其他权利义务性文件等相应终止(但我们与您之间已约定继续生效的或法律法规另有规定的除外);
\n\n(4)账号注销后,您的贵族、VIP、钱包余额权益将被完全删除。 \n\n(4)账号注销后,您的贵族、VIP、钱包余额权益将被完全删除。
\n\n(5)账号注销的处理期限为10日,也就是说,在您已成功向我们提交了红杉直播账号注销申请后的10日内(从成功提交申请之时起算),账号将被注销(本协议另有约定的除外)。 \n\n(5)账号注销的处理期限为10日,也就是说,在您已成功向我们提交了M直播账号注销申请后的10日内(从成功提交申请之时起算),账号将被注销(本协议另有约定的除外)。
\n\n5、账号注销步骤: \n\n5、账号注销步骤:
\n\n(1)点击app右下角“我的”; \n\n(1)点击app右下角“我的”;
\n\n(2)点击我的页面顶部个人信息编辑区; \n\n(2)点击我的页面顶部个人信息编辑区;
...@@ -287,7 +287,7 @@ ...@@ -287,7 +287,7 @@
若您和我们发生任何纠纷或争议,首先应友好协商解决;协商不成的,您同意将纠纷或争议提交深圳互联网法院通过诉讼解决;纠纷事由依法不属于南宁互联网法院受理范围的,应提交本隐私政策签订地(广东省深圳市南山区)有管辖权的人民法院管辖。 若您和我们发生任何纠纷或争议,首先应友好协商解决;协商不成的,您同意将纠纷或争议提交深圳互联网法院通过诉讼解决;纠纷事由依法不属于南宁互联网法院受理范围的,应提交本隐私政策签订地(广东省深圳市南山区)有管辖权的人民法院管辖。
\n\n十一、如何联系我们 \n\n十一、如何联系我们
\n\n您可以通过以下方式与我们联系: \n\n您可以通过以下方式与我们联系:
\n\n1、如对本隐私政策内容有任何疑问、意见或建议,您可以联系我们的在线红杉直播体育官网右下角“在线客服”或者通过红杉直播客户端APP “我的”-“在线客服”与我们取得联系。 \n\n1、如对本隐私政策内容有任何疑问、意见或建议,您可以联系我们的在线M直播体育官网右下角“在线客服”或者通过M直播客户端APP “我的”-“在线客服”与我们取得联系。
\n\n2、我们还设立了个人信息保护专职部门,您可以发送邮件与我们联系。 \n\n2、我们还设立了个人信息保护专职部门,您可以发送邮件与我们联系。
\n\n邮箱:smsugk@163.com \n\n邮箱:smsugk@163.com
\n\n常用办公地址:北京市房山区良乡凯旋大街建设路18号-D670 \n\n常用办公地址:北京市房山区良乡凯旋大街建设路18号-D670
......
...@@ -325,7 +325,7 @@ abstract class BaseActivity<P : IBasePresenter?> : RxAppCompatActivity(), IBaseD ...@@ -325,7 +325,7 @@ abstract class BaseActivity<P : IBasePresenter?> : RxAppCompatActivity(), IBaseD
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) { if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) {
var eventId = 0 var eventId = 0
if (data != null) eventId = data.getIntExtra(KEY_LOGIN_EVENT, 0) if (data != null) eventId = data.getIntExtra(KEY_LOGIN_EVENT, 0)
backFromLogin(eventId) //从登界面返回 登录成功 backFromLogin(eventId) //从登界面返回 登录成功
} }
} }
......
...@@ -139,7 +139,7 @@ abstract class BaseFragment<P : IBasePresenter?> : RxFragment(), IBaseDisplay { ...@@ -139,7 +139,7 @@ abstract class BaseFragment<P : IBasePresenter?> : RxFragment(), IBaseDisplay {
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) { if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_LOGIN) {
var eventId = 0 var eventId = 0
if (data != null) eventId = data.getIntExtra(KEY_LOGIN_EVENT, 0) if (data != null) eventId = data.getIntExtra(KEY_LOGIN_EVENT, 0)
backFromLogin(eventId) //从登界面返回 登录成功 backFromLogin(eventId) //从登界面返回 登录成功
} }
} }
......
...@@ -106,7 +106,7 @@ class CompressUtil internal constructor() { ...@@ -106,7 +106,7 @@ class CompressUtil internal constructor() {
// 图片不支持获取角度 // 图片不支持获取角度
return 0 return 0
} }
val orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, val orientation = exifInterface?.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL) ExifInterface.ORIENTATION_NORMAL)
when (orientation) { when (orientation) {
ExifInterface.ORIENTATION_ROTATE_90 -> degree = 90 ExifInterface.ORIENTATION_ROTATE_90 -> degree = 90
......
...@@ -3,7 +3,7 @@ apply from: "config.gradle" ...@@ -3,7 +3,7 @@ apply from: "config.gradle"
buildscript { buildscript {
ext.kotlin_version = '1.3.72' ext.kotlin_version = '1.5.31'
repositories { repositories {
google() google()
......
...@@ -5,8 +5,8 @@ ext { ...@@ -5,8 +5,8 @@ ext {
ver = [ ver = [
//Version //Version
versionCode : 11, versionCode : 14,
versionName : "1.0", versionName : "1.0.3",
//SDK And Tools //SDK And Tools
minSdkVersion : 23, minSdkVersion : 23,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment