mireo 1.2.0

This commit is contained in:
yuyl 2025-05-13 14:30:20 +08:00
parent 3f53608d63
commit d3a94a3bad
37 changed files with 768 additions and 172 deletions

View File

@ -0,0 +1,11 @@
package com.localee.mireo.app.http.api
import com.hjq.http.config.IRequestApi
class RevolutionsApi : IRequestApi {
override fun getApi(): String {
return "getRevolutions"
}
}

View File

@ -18,6 +18,8 @@ class VideoDetailsApi : IRequestApi {
var activity_id: Int? = null
var revolution: String? = null
data class Bean(

View File

@ -0,0 +1,5 @@
package com.localee.mireo.app.http.bean
interface QualityBackClick {
fun qualityBackClick(quality: Int)
}

View File

@ -0,0 +1,11 @@
package com.localee.mireo.app.http.bean
class RevolutionBean(
val list: List<RevolutionBeanItem>
) {
data class RevolutionBeanItem(
val can_check: Boolean,
val condition: Int,
val value: Int
)
}

View File

@ -16,6 +16,10 @@ class TranslatesBean(
)
data class Translates(
val mireo_order_record: String,
val mireo_activate_vip_content: String,
val mireo_activate_vip_title: String,
val mireo_quality: String,
val mireo_unlock_vip: String,
val mireo_vip_splash_tip: String,
val mireo_vip_splash_title: String,

View File

@ -51,6 +51,8 @@ object MsConstants {
const val CONSTANTS_short_play_id = "CONSTANTS_short_play_id"
const val CONSTANTS_activity_id = "CONSTANTS_activity_id"
const val CONSTANTS_stop_play = "CONSTANTS_stop_play"
const val CONSTANTS_pause_play = "CONSTANTS_pause_play"
const val CONSTANTS_start_play = "CONSTANTS_start_play"
const val Constants_requestPermissions_photo = "Constants_requestPermissions_photo"
const val CONSTANTS_auth_refresh = "CONSTANTS_auth_refresh"

View File

@ -152,7 +152,7 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onLoadFailed(errorDrawable: Drawable?) {
super.onLoadFailed(errorDrawable)
setNotification(intent, title, messageBody, null)
}
override fun onLoadCleared(placeholder: Drawable?) {

View File

@ -487,7 +487,6 @@ class MyVipActivity : AppActivity() {
})
}
private fun getCustomerUser() {
EasyHttp.get(this)
.api(UserInfoApi())
@ -496,6 +495,7 @@ class MyVipActivity : AppActivity() {
result.getData()?.let {
MsMMKVUtils.saveUserInfo(it)
setUI()
finish()
}
}
})

View File

@ -62,6 +62,7 @@ class StoreActivity : AppActivity() {
private val tvBuy: TextView? by lazy { findViewById(R.id.tv_buy) }
private val tvVipExpires: TextView? by lazy { findViewById(R.id.tv_vip_expires) }
private val tvName: TextView? by lazy { findViewById(R.id.tv_name) }
private val tvCoinRecharge: TextView? by lazy { findViewById(R.id.tv_coin_recharge) }
private val tvCoinsText: TextView? by lazy { findViewById(R.id.tv_coins_text) }
private val tvMemberTitle: TextView? by lazy { findViewById(R.id.tv_member_title) }
private val tvMembership: TextView? by lazy { findViewById(R.id.tv_membership) }
@ -97,6 +98,7 @@ class StoreActivity : AppActivity() {
title?.setRightTitle(TranslatesUtils.translates()?.mireo_restore)
tvName?.text = TranslatesUtils.translates()?.mireo_store_recharge_discount
tvVipExpires?.text = TranslatesUtils.translates()?.mireo_store_limited
tvCoinRecharge?.text = TranslatesUtils.translates()?.mireo_coin_recharege
tvCoinsText?.text = TranslatesUtils.translates()?.mireo_store_coins
tvMemberTitle?.text = TranslatesUtils.translates()?.mireo_store_benefits
tvMembership?.text = TranslatesUtils.translates()?.mireo_store_recharge
@ -110,7 +112,7 @@ class StoreActivity : AppActivity() {
TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips),
Html.FROM_HTML_MODE_COMPACT
)
}else{
} else {
tvHint?.text = Html.fromHtml(
TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips)
)

View File

@ -42,12 +42,15 @@ import com.localee.mireo.app.http.api.CreateHistoryApi
import com.localee.mireo.app.http.api.DetailsRecommandApi
import com.localee.mireo.app.http.api.DoBuyVideoApi
import com.localee.mireo.app.http.api.ExampleRecommendDataRes
import com.localee.mireo.app.http.api.RevolutionsApi
import com.localee.mireo.app.http.api.UploadHistorySecondsApi
import com.localee.mireo.app.http.api.UserInfoApi
import com.localee.mireo.app.http.api.UserInfoRes
import com.localee.mireo.app.http.api.VideoDetailsApi
import com.localee.mireo.app.http.bean.HomeDataHistoryBean
import com.localee.mireo.app.http.bean.PaySettingsBean
import com.localee.mireo.app.http.bean.QualityBackClick
import com.localee.mireo.app.http.bean.RevolutionBean
import com.localee.mireo.app.http.bean.UploadHistoryBean
import com.localee.mireo.app.http.model.HttpData
import com.localee.mireo.app.other.MsConstants
@ -58,6 +61,7 @@ import com.localee.mireo.app.other.MsConstants.CONSTANTS_short_play_id
import com.localee.mireo.app.other.MsConstants.Constants_Episodes_Series_Data_currentPositionExample
import com.localee.mireo.app.other.MsConstants.ExampleDetailCanPlay
import com.localee.mireo.app.ui.adapter.RecommendBannerAdapter
import com.localee.mireo.app.ui.dialog.DialogUtils
import com.localee.mireo.app.ui.fragment.RechargeDialogFragment
import com.localee.mireo.app.ui.videoPaly.ExampleSeriesDialogFragment
import com.localee.mireo.app.ui.videoPaly.ExampleUnFavoriteDialog
@ -100,8 +104,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
private var recommendAdapter: VideoPlayAdapter? = null
private var data: ExampleRecommendDataRes.Data? = null
private var revolution =
MsMMKVUtils.getMMKV().getInt(MsConstants.CONSTANTS_quality, 0).toString()
MsMMKVUtils.getMMKV().getInt(MsConstants.CONSTANTS_quality, 540).toString()
private val srRecommend: SmartRefreshLayout? by lazy { findViewById(R.id.sr_recommend) }
private val viewPagerExampleRecommend: ViewPager2? by lazy { findViewById(R.id.viewPager_example_recommend) }
@ -218,7 +221,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
fun initialization() {
if (NetworkUtils.isConnected()) {
getVideoDetails(shortPlayId, 0, activityId)
getVideoDetails(shortPlayId, 0, activityId, revolution)
} else {
if (TranslatesUtils.translates() != null) {
@ -235,7 +238,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
detailPlayerView()?.stop()
detailPlayerView()?.release()
}
getVideoDetails(shortPlayId, 0, activityId)
getVideoDetails(shortPlayId, 0, activityId, revolution)
} else {
if (TranslatesUtils.translates() != null) {
ToastUtils.show(TranslatesUtils.translates()?.mireo_no_network.toString())
@ -357,7 +360,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
)
) {
if (!first) {
getVideoDetails(shortPlayId, 0, activityId)
getVideoDetails(shortPlayId, 0, activityId, revolution)
} else {
first = false
}
@ -385,7 +388,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
return@singleClick
}
currentPage = 1
getVideoDetails(shortPlayId, 0, activityId)
getVideoDetails(shortPlayId, 0, activityId, revolution)
}
}
tvExampleRetry?.setOnClickListener {
@ -399,7 +402,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
return@singleClick
}
currentPage = 1
getVideoDetails(shortPlayId, 0, activityId)
getVideoDetails(shortPlayId, 0, activityId, revolution)
}
}
}
@ -420,7 +423,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
detailPlayerView()?.stop()
detailPlayerView()?.release()
}
getVideoDetails(shortPlayId, 0, activityId)
getVideoDetails(shortPlayId, 0, activityId, revolution)
qualityRefresh = false
} else {
detailPlayerView()?.play()
@ -436,19 +439,25 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
fun getVideoDetails(
shortPlayId: Int?,
videoId: Int?,
activityId: Int?
activityId: Int?,
mRevolution: String?
) {
EasyHttp.get(this)
.api(VideoDetailsApi().apply {
activity_id = activityId;
video_id = videoId;
short_play_id = shortPlayId;
activity_id = activityId
video_id = videoId
short_play_id = shortPlayId
revolution = mRevolution
})
.request(object : HttpCallbackProxy<HttpData<VideoDetailsApi.Bean>>(this) {
override fun onHttpSuccess(result: HttpData<VideoDetailsApi.Bean>) {
result.getData()?.let {
if (it.episodeList.isNotEmpty()) {
it.revolution?.let { it1 ->
MsMMKVUtils.getMMKV()
.putInt(CONSTANTS_quality, it1)
}
shortVideo = it.shortPlayInfo
cover?.visibility = View.INVISIBLE
viewPagerExampleRecommend?.visibility = View.VISIBLE
@ -461,7 +470,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
createHistory(
it.episodeList[0].short_play_id,
it.episodeList[0].short_play_video_id
);
)
exampleNetwork?.visibility = View.INVISIBLE
exampleEmpty?.visibility = View.INVISIBLE
cover?.let { it1 ->
@ -493,10 +502,6 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
}
})
// ExampleRecommendRequest.getVideoDetails(current_page, page_size, revolution)
// .observeForever { result ->
// recommendLiveData.value = result.getOrNull()
// }
}
fun createHistory(videoId: Int, shortPlayId: Int) {
@ -705,7 +710,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
if (CONSTANTS_quality_refresh == event) {
revolution =
MsMMKVUtils.getMMKV().getInt(MsConstants.CONSTANTS_quality, 0)
MsMMKVUtils.getMMKV().getInt(MsConstants.CONSTANTS_quality, 540)
.toString()
qualityRefresh = true
}
@ -714,75 +719,35 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
handleCustomLogic()
}
if (CONSTANTS_quality == event) {
startActivity(SearchActivity::class.java)
if (episode?.is_lock == false) {
getRevolutions()
}
}
if (MsConstants.CONSTANTS_pay_refresh == event) {
needRefresh = true
getCustomerUser()
}
if (MsConstants.CONSTANTS_user_refresh == event) {
revolution = "720"
MsMMKVUtils.getMMKV()
.putInt(CONSTANTS_quality, 720)
detailRefresh()
EventBus.getDefault().post(CONSTANTS_quality_refresh)
}
if (MsConstants.CONSTANTS_stop_play == event) {
recommendAdapter?.items?.get(currentPosition)?.let {
rechargeDialog(it)
}
viewLock?.postDelayed({ detailPlayerView()?.pause() }, 500)
}
if (MsConstants.CONSTANTS_pause_play == event) {
viewLock?.postDelayed({ detailPlayerView()?.pause() }, 500)
}
if (MsConstants.CONSTANTS_start_play == event) {
viewLock?.postDelayed({ detailPlayerView()?.play() }, 500)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEvent(event: BaseEventBus<VideoDetailsApi.Bean.ShortPlayInfo>) {
// if (MsConstants.Constants_Episodes_Series_DataExample == event.code) {
// if (recommendAdapter?.items?.get(currentPosition)?.name == event.data.name) {
// val imageView =
// detailPlayerView()?.findViewById<AppCompatImageView>(R.id.example_iv_collection_controller)
// val textview =
// detailPlayerView()?.findViewById<AppCompatTextView>(R.id.example_tv_collection_num_controller)
// imageView?.setImageResource(if (event.data.is_collect) R.mipmap.iv_example_collection_h else R.mipmap.iv_example_collection_n)
// recommendAdapter?.items?.get(currentPosition)?.collect_total =
// event.data.collect_total
// recommendAdapter?.items?.get(currentPosition)?.is_collect =
// event.data.is_collect
// textview?.text = formatNumber(event.data.collect_total)
// }
// }
}
// override fun collection(dataRes: ExampleRecommendDataRes.Data) {
// singleClick {
// data = dataRes
// if (dataRes.is_collect) {
// val exampleUnFavoriteDialog = ExampleUnFavoriteDialog(this)
// val tvThinkAgain =
// exampleUnFavoriteDialog.findViewById<AppCompatTextView>(R.id.example_tv_think_again)
// val tvUnfavorite =
// exampleUnFavoriteDialog.findViewById<AppCompatTextView>(R.id.example_tv_unfavorite)
// val tvTitle =
// exampleUnFavoriteDialog.findViewById<AppCompatTextView>(R.id.example_tv_title)
// val tvContent =
// exampleUnFavoriteDialog.findViewById<AppCompatTextView>(R.id.example_tv_content)
// if (TranslatesUtils.translates() != null) {
// tvThinkAgain.text = TranslatesUtils.translates()?.mireo_try_again
// tvUnfavorite.text = TranslatesUtils.translates()?.mireo_unfavorite
// tvTitle.text = TranslatesUtils.translates()?.mireo_unfavorite
// tvContent.text = TranslatesUtils.translates()?.mireo_not_collect_warning
// }
// tvThinkAgain.setOnClickListener { exampleUnFavoriteDialog.dismiss() }
// tvUnfavorite.setOnClickListener {
// dataRes.video_info?.short_play_id?.let {
// dataRes.video_info.short_play_video_id.let { it1 ->
// doCancelCollect(
// it, it1
// )
// }
// }
// exampleUnFavoriteDialog.dismiss()
// }
// exampleUnFavoriteDialog.show()
// } else {
// dataRes.video_info?.short_play_id?.let {
// dataRes.video_info.short_play_video_id.let { it1 ->
// doCollect(
// it, it1
// )
// }
// }
// }
// }
// }
override fun collection(episode: VideoDetailsApi.Bean.Episode) {
singleClick {
if (shortVideo?.is_collect == true) {
@ -946,6 +911,36 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
})
}
fun getRevolutions() {
EasyHttp.get(this)
.api(RevolutionsApi())
.request(object : HttpCallbackProxy<HttpData<RevolutionBean>>(this) {
override fun onHttpSuccess(result: HttpData<RevolutionBean>) {
result.getData()?.let {
setQuality(it)
} ?: kotlin.run {
if (TranslatesUtils.translates() != null) {
toast(TranslatesUtils.translates()?.mireo_network_error.toString())
} else {
toast(getString(R.string.example_service_exception_please_try_again))
}
}
}
})
}
private fun setQuality(revolutionRes: RevolutionBean) {
DialogUtils.showQuality(this, object : QualityBackClick {
override fun qualityBackClick(quality: Int) {
MsMMKVUtils.getMMKV()
.putInt(CONSTANTS_quality, quality)
EventBus.getDefault().post(CONSTANTS_quality_refresh)
revolution = quality.toString()
detailRefresh()
}
}, revolutionRes)
}
private fun detailRefresh() {
detailPlayerView()?.pause()
detailPlayerView()?.stop()
@ -955,6 +950,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
it1.short_play_id,
it1.short_play_video_id,
activityId,
revolution
)
}
}
@ -1123,7 +1119,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
if (short_play_id != null) {
shortPlayId = short_play_id
}
getVideoDetails(shortPlayId, 0, activityId)
getVideoDetails(shortPlayId, 0, activityId, revolution)
}
}, 300)
viewVideoRecommend?.visibility = View.INVISIBLE

View File

@ -0,0 +1,31 @@
package com.localee.mireo.app.ui.dialog
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.view.Gravity
import android.view.Window
import android.view.WindowManager
import com.localee.mireo.shortapp.R
class ActivateVipDialog (context: Context) : Dialog(context) {
init {
init()
}
private fun init() {
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.dialog_activate_vip)
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
window?.setLayout(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
window?.setGravity(Gravity.CENTER)
setCancelable(true)
}
}

View File

@ -0,0 +1,174 @@
package com.localee.mireo.app.ui.dialog
import android.content.Context
import android.content.Intent
import android.graphics.Color
import androidx.appcompat.widget.AppCompatImageView
import androidx.appcompat.widget.AppCompatTextView
import com.hjq.shape.view.ShapeTextView
import com.localee.mireo.app.http.bean.QualityBackClick
import com.localee.mireo.app.http.bean.RevolutionBean
import com.localee.mireo.app.other.MsConstants
import com.localee.mireo.app.ui.activity.HomeActivity
import com.localee.mireo.app.utils.MsMMKVUtils
import com.localee.mireo.app.utils.TranslatesUtils
import com.localee.mireo.shortapp.R
import org.greenrobot.eventbus.EventBus
object DialogUtils {
fun showQuality(
context: Context,
qualityBack: QualityBackClick?,
revolutionRes: RevolutionBean?
) {
val size = revolutionRes?.list?.size ?: 0
val exampleQualityDialog = QualityDialog(context)
val tv_quality =
exampleQualityDialog.findViewById<AppCompatTextView>(R.id.tv_quality)
val tv_quality_info_480 =
exampleQualityDialog.findViewById<ShapeTextView>(R.id.tv_quality_480)
val tv_quality_info_720 =
exampleQualityDialog.findViewById<ShapeTextView>(R.id.tv_quality_720)
val tv_quality_info_1080 =
exampleQualityDialog.findViewById<ShapeTextView>(R.id.tv_quality_1080)
val iv_login_tag = exampleQualityDialog.findViewById<AppCompatImageView>(R.id.iv_login_tag)
val iv_vip_tag = exampleQualityDialog.findViewById<AppCompatImageView>(R.id.iv_vip_tag)
val int = MsMMKVUtils.getMMKV().getInt(MsConstants.CONSTANTS_quality, 0)
if (size > 0 && null != revolutionRes?.list?.get(0)) {
val revolution = revolutionRes.list[0]
tv_quality_info_480.text = revolution.value.toString().plus("p")
if (revolution.can_check) {
if (int == revolution.value) {
tv_quality_info_480.shapeDrawableBuilder?.setStrokeSize(1)
?.intoBackground()
tv_quality_info_480.setTextColor(Color.parseColor("#F56490"))
} else {
tv_quality_info_480.shapeDrawableBuilder?.setStrokeSize(0)
?.intoBackground()
tv_quality_info_480.setTextColor(Color.parseColor("#FFFFFF"))
}
tv_quality_info_480.setOnClickListener {
if (int != revolution.value) {
qualityBack?.qualityBackClick(revolution.value)
exampleQualityDialog.dismiss()
}
}
} else {
tv_quality_info_480.shapeDrawableBuilder?.setStrokeSize(0)
?.intoBackground()
tv_quality_info_480.setTextColor(Color.parseColor("#8B8B8B"))
}
}
if (size > 1 && null != revolutionRes?.list?.get(1)) {
val revolution = revolutionRes.list[1]
tv_quality_info_720.text = revolution.value.toString().plus("p")
if (revolution.can_check) {
if (int == revolution.value) {
tv_quality_info_720.shapeDrawableBuilder?.setStrokeSize(1)
?.intoBackground()
tv_quality_info_720.setTextColor(Color.parseColor("#F56490"))
} else {
tv_quality_info_720.shapeDrawableBuilder?.setStrokeSize(0)
?.intoBackground()
tv_quality_info_720.setTextColor(Color.parseColor("#FFFFFF"))
}
iv_login_tag.setImageResource(R.mipmap.ic_login_tag)
tv_quality_info_720.setOnClickListener {
if (int != revolution.value) {
qualityBack?.qualityBackClick(revolution.value)
exampleQualityDialog.dismiss()
}
}
} else {
tv_quality_info_720.shapeDrawableBuilder?.setStrokeSize(0)
?.intoBackground()
tv_quality_info_720.setTextColor(Color.parseColor("#8B8B8B"))
iv_login_tag.setImageResource(R.mipmap.ic_login_tag)
tv_quality_info_720.setOnClickListener {
context.startActivity(
Intent(
context,
HomeActivity::class.java
)
)
EventBus.getDefault().post(MsConstants.CONSTANTS_Login)
exampleQualityDialog.dismiss()
}
}
}
if (size > 2 && null != revolutionRes?.list?.get(2)) {
val revolution = revolutionRes.list[2]
tv_quality_info_1080.text = revolution.value.toString().plus("p")
if (revolution.can_check) {
if (int == revolution.value) {
tv_quality_info_1080.shapeDrawableBuilder?.setStrokeSize(1)
?.intoBackground()
tv_quality_info_1080.setTextColor(Color.parseColor("#F56490"))
} else {
tv_quality_info_1080.shapeDrawableBuilder?.setStrokeSize(0)
?.intoBackground()
tv_quality_info_1080.setTextColor(Color.parseColor("#FFFFFF"))
}
tv_quality_info_1080.setOnClickListener {
if (int != revolution.value) {
qualityBack?.qualityBackClick(revolution.value)
exampleQualityDialog.dismiss()
}
}
iv_vip_tag.setImageResource(R.mipmap.ic_vip_tag)
} else {
tv_quality_info_1080.shapeDrawableBuilder?.setStrokeSize(0)
?.intoBackground()
iv_vip_tag.setImageResource(R.mipmap.ic_vip_tag)
tv_quality_info_1080.setTextColor(Color.parseColor("#8B8B8B"))
tv_quality_info_1080.setOnClickListener {
EventBus.getDefault()
.post(MsConstants.CONSTANTS_pause_play)
showActivate(context)
exampleQualityDialog.dismiss()
}
}
}
tv_quality?.text =
TranslatesUtils.translates()?.mireo_quality
?: "Playback Quality"
exampleQualityDialog.show()
}
private fun showActivate(context: Context) {
val activateVIPDialog = ActivateVipDialog(context)
val tv_title =
activateVIPDialog.findViewById<AppCompatTextView>(R.id.tv_title)
val tv_content =
activateVIPDialog.findViewById<AppCompatTextView>(R.id.tv_content)
val iv_close_vip =
activateVIPDialog.findViewById<AppCompatImageView>(R.id.iv_close_vip)
val tv_later =
activateVIPDialog.findViewById<AppCompatTextView>(R.id.tv_later)
val tv_open =
activateVIPDialog.findViewById<AppCompatTextView>(R.id.tv_open)
tv_title?.text =
TranslatesUtils.translates()?.mireo_activate_vip_title
?: "Unlock HD VIP Access!"
tv_content?.text =
TranslatesUtils.translates()?.mireo_activate_vip_content
?: "Activate vip and enjoy HD video privileges"
tv_later?.text = TranslatesUtils.translates()?.mireo_open_notification_later ?: "Later"
tv_open?.text = TranslatesUtils.translates()?.mireo_open_notification_open ?: "Open"
tv_open?.setOnClickListener {
EventBus.getDefault()
.post(MsConstants.CONSTANTS_stop_play)
activateVIPDialog.dismiss()
}
tv_later?.setOnClickListener {
EventBus.getDefault()
.post(MsConstants.CONSTANTS_start_play)
activateVIPDialog.dismiss()
}
iv_close_vip?.setOnClickListener { activateVIPDialog.dismiss() }
activateVIPDialog.show()
}
}

View File

@ -0,0 +1,30 @@
package com.localee.mireo.app.ui.dialog
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.view.Gravity
import android.view.Window
import android.view.WindowManager
import com.localee.mireo.shortapp.R
class QualityDialog(context: Context) : Dialog(context) {
init {
init()
}
private fun init() {
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.dialog_quality)
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
window?.setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
window?.setGravity(Gravity.BOTTOM)
setCancelable(true)
}
}

View File

@ -437,6 +437,7 @@ class ExploreFragment : TitleBarFragment<HomeActivity>(),
.toString()
qualityRefresh = true
}
}
@Subscribe(threadMode = ThreadMode.MAIN)

View File

@ -77,6 +77,7 @@ class MineFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener
private val sbAbout: SettingBar? by lazy { findViewById(R.id.sb_about) }
private val sbFeedback: SettingBar? by lazy { findViewById(R.id.sb_feedback) }
private val sbLanguage: SettingBar? by lazy { findViewById(R.id.sb_language) }
private val sbOrder: SettingBar? by lazy { findViewById(R.id.sb_order) }
private var vipSplashDialog: VipSplashDialog? = null
private var bind: DialogVipSplashBinding? = null
private var isVipSplash = false
@ -109,7 +110,8 @@ class MineFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener
R.id.ll_wallet,
R.id.ll_vip,
R.id.ll_store,
R.id.tv_login
R.id.tv_login,
R.id.sb_order
)
recyclerView?.layoutManager =
@ -149,6 +151,7 @@ class MineFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener
sbAbout?.setLeftText(TranslatesUtils.translates()?.mireo_about_us)
sbFeedback?.setLeftText(TranslatesUtils.translates()?.mireo_feedback)
sbLanguage?.setLeftText(TranslatesUtils.translates()?.mireo_choose_language)
sbOrder?.setLeftText(TranslatesUtils.translates()?.mireo_order_record)
}
if (MsMMKVUtils.isTourist()) {
@ -279,7 +282,7 @@ class MineFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener
startActivity(LanguageSwitchActivity::class.java)
}
R.id.ll_wallet -> {
R.id.ll_wallet, R.id.sb_order -> {
startActivity(MyWalletActivity::class.java)
}
@ -343,17 +346,23 @@ class MineFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener
bind?.tvVipBenefits?.text = TranslatesUtils.translates()?.mireo_unlock_vip
bind?.ivClose?.setOnClickListener {
MsMMKVUtils.getMMKV().putLong(
MsConstants.CONSTANTS_PREF_LAST_POPUP_TIME_VIP,
System.currentTimeMillis()
)
vipSplashDialog?.dismiss()
isVipSplash = false
System.gc()
}
bind?.tvVipBenefits?.setOnClickListener {
MsMMKVUtils.getMMKV().putLong(
MsConstants.CONSTANTS_PREF_LAST_POPUP_TIME_VIP,
System.currentTimeMillis()
)
startActivity(StoreActivity::class.java)
startActivity(MyVipActivity::class.java)
vipSplashDialog?.dismiss()
isVipSplash = false
System.gc()
}
vipSplashDialog?.show()
isVipSplash = true

View File

@ -229,21 +229,21 @@ class ExampleRecommendPlayerView(context: Context, attrs: AttributeSet?) :
ivCover?.visibility = View.VISIBLE
MsConstants.Exampleready = false
exampleTvTitlePlayerController?.text = dataRes.name
if (TranslatesUtils.translates() != null) {
exampleTvEpisodePlayerController?.text = TranslatesUtils.replace(
TranslatesUtils.translates()?.mireo_episode_set.toString(),
dataRes.video_info.episode.toString()
).plus(" / ").plus(
TranslatesUtils.replace(
TranslatesUtils.translates()?.mireo_complete_episode.toString(),
dataRes.episode_total.toString()
)
)
} else {
// if (TranslatesUtils.translates() != null) {
// exampleTvEpisodePlayerController?.text = TranslatesUtils.replace(
// TranslatesUtils.translates()?.mireo_episode_set.toString(),
// dataRes.video_info.episode.toString()
// ).plus(" / ").plus(
// TranslatesUtils.replace(
// TranslatesUtils.translates()?.mireo_complete_episode.toString(),
// dataRes.episode_total.toString()
// )
// )
// } else {
exampleTvEpisodePlayerController?.text =
"EP.".plus(dataRes.video_info.episode).plus(" / EP.")
.plus(dataRes.episode_total)
}
// }
exampleTvCollectionNumController?.text = dataRes.collect_total?.let { formatNumber(it) }
exampleTvCollectionNumController?.setTextColor(
if (dataRes.is_collect) resources.getColor(

View File

@ -54,11 +54,11 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
private var player: ExoPlayer? = builder.build()
private val viewLifecycleScope = MainScope()
private var isDragging = false
private var exampleSeekbarPlayerController: AppCompatSeekBar? = null
private var seekbarPlayerController: AppCompatSeekBar? = null
private var exampleProgressJob: Job? = null
private var exampleIvPlayPlayerController: AppCompatImageView? = null
private var exampleIvCollectionController: AppCompatImageView? = null
private var exampleIvBackController: AppCompatImageView? = null
private var ivPlayPlayerController: AppCompatImageView? = null
private var ivCollectionController: AppCompatImageView? = null
private var ivBackController: AppCompatImageView? = null
private var ivCover: AppCompatImageView? = null
private var exampleTvEpisodePlayerController: ShapeTextView? = null
private var ivEpisodePlayerController: AppCompatImageView? = null
@ -80,13 +80,13 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
.inflate(R.layout.example_detail_player_view, this, true)
val exampleDetailPlayerViewBinding = ExampleDetailPlayerViewBinding.bind(inflate)
exampleDetailPlayerViewBinding.playerView.player = player
exampleSeekbarPlayerController =
seekbarPlayerController =
exampleDetailPlayerViewBinding.playerView.findViewById(R.id.example_seekBar_player_controller)
exampleIvPlayPlayerController =
ivPlayPlayerController =
exampleDetailPlayerViewBinding.playerView.findViewById(R.id.example_iv_play_player_controller)
exampleIvCollectionController =
ivCollectionController =
exampleDetailPlayerViewBinding.playerView.findViewById(R.id.example_iv_collection_controller)
exampleIvBackController =
ivBackController =
exampleDetailPlayerViewBinding.playerView.findViewById(R.id.example_iv_back_controller)
ivCover = exampleDetailPlayerViewBinding.playerView.findViewById(R.id.iv_cover_detail)
tvExampleSeries =
@ -119,7 +119,7 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
}
Player.STATE_READY -> {
exampleIvPlayPlayerController?.isEnabled = true
ivPlayPlayerController?.isEnabled = true
if (ExampleDetailCanPlay && !ExampleLock) {
if (seek && progress > 0) {
player?.seekTo(progress)
@ -139,7 +139,7 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
}
Player.STATE_IDLE -> {
exampleIvPlayPlayerController?.isEnabled = false
ivPlayPlayerController?.isEnabled = false
}
}
}
@ -150,7 +150,7 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
loadingLine?.visibility = View.INVISIBLE
}
})
exampleIvPlayPlayerController?.setOnClickListener {
ivPlayPlayerController?.setOnClickListener {
if (!ExampleLock) {
if (MsConstants.ExampleDetailPlaying) {
pause()
@ -181,21 +181,21 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
private fun setProgress() {
exampleProgressJob?.cancel()
val duration = player!!.duration
exampleSeekbarPlayerController?.max = duration.toInt()
exampleSeekbarPlayerController?.progress = player!!.currentPosition.toInt()
exampleSeekbarPlayerController?.setOnSeekBarChangeListener(null)
seekbarPlayerController?.max = duration.toInt()
seekbarPlayerController?.progress = player!!.currentPosition.toInt()
seekbarPlayerController?.setOnSeekBarChangeListener(null)
exampleProgressJob = viewLifecycleScope.launch {
while (isActive) {
if (!isDragging) {
withContext(Dispatchers.Main) {
exampleSeekbarPlayerController?.progress = player!!.currentPosition.toInt()
seekbarPlayerController?.progress = player!!.currentPosition.toInt()
}
}
delay(1000)
}
}
exampleSeekbarPlayerController?.setOnSeekBarChangeListener(object :
seekbarPlayerController?.setOnSeekBarChangeListener(object :
SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
if (fromUser) {
@ -222,14 +222,14 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
fun play() {
player?.play()
exampleIvPlayPlayerController?.setImageResource(R.mipmap.iv_example_stop)
ivPlayPlayerController?.setImageResource(R.mipmap.iv_example_stop)
MsConstants.ExampleDetailPlaying = true
isDragging = false
}
fun pause() {
player?.pause()
exampleIvPlayPlayerController?.setImageResource(R.mipmap.iv_example_play)
ivPlayPlayerController?.setImageResource(R.mipmap.iv_example_play)
MsConstants.ExampleDetailPlaying = false
isDragging = true
}
@ -282,23 +282,23 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
seek = true
ivCover?.visibility = View.VISIBLE
exampleTvTitlePlayerController?.text = shortVideo.name
if (TranslatesUtils.translates() != null) {
exampleTvEpisodePlayerController?.text = TranslatesUtils.replace(
TranslatesUtils.translates()?.mireo_episode_set.toString(),
episode.episode.toString()
).plus(" / ").plus(
TranslatesUtils.replace(
TranslatesUtils.translates()?.mireo_complete_episode.toString(),
shortVideo.episode_total.toString()
)
)
// tvExampleSeries?.text = TranslatesUtils.translates()?.recommand_series
} else {
// if (TranslatesUtils.translates() != null) {
// exampleTvEpisodePlayerController?.text = TranslatesUtils.replace(
// TranslatesUtils.translates()?.mireo_episode_set.toString(),
// episode.episode.toString()
// ).plus(" / ").plus(
// TranslatesUtils.replace(
// TranslatesUtils.translates()?.mireo_complete_episode.toString(),
// shortVideo.episode_total.toString()
// )
// )
//// tvExampleSeries?.text = TranslatesUtils.translates()?.recommand_series
// } else {
exampleTvEpisodePlayerController?.text =
"EP.".plus(episode.episode).plus(" / EP.")
.plus(shortVideo.episode_total)
// tvExampleSeries?.text = context.getString(R.string.example_series)
}
// }
exampleTvDesPlayerController?.text = shortVideo.description
exampleTvCollectionNumController?.text = formatNumber(shortVideo.collect_total)
exampleTvCollectionNumController?.setTextColor(
@ -306,7 +306,7 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
R.color.example_color_F56490
) else resources.getColor(R.color.white)
)
exampleIvCollectionController?.setImageResource(if (shortVideo.is_collect) R.mipmap.iv_example_collection_h else R.mipmap.iv_example_collection_n)
ivCollectionController?.setImageResource(if (shortVideo.is_collect) R.mipmap.iv_example_collection_h else R.mipmap.iv_example_collection_n)
player?.setMediaSource(buildMediaSource(episode.video_url))
player?.prepare()
exampleTvEpisodePlayerController?.setOnClickListener {
@ -316,12 +316,10 @@ class VideoPlayerView(context: Context, attrs: AttributeSet?) :
}
}
ivEpisodePlayerController?.setOnClickListener {
if (!episode.is_lock) {
EventBus.getDefault()
.post(MsConstants.Constants_RecommendPlayerView_DramaSeriesExample)
}
EventBus.getDefault()
.post(MsConstants.CONSTANTS_quality)
}
exampleIvBackController?.setOnClickListener {
ivBackController?.setOnClickListener {
EventBus.getDefault()
.post(MsConstants.Constants_RecommendPlayerView_CLOSEExample)
}

View File

@ -182,8 +182,9 @@
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_no_ads"
android:drawablePadding="@dimen/dp_8"
android:maxLines="2"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Ad-FreeStreaming"
android:textColor="#c4c4c4"
android:textSize="@dimen/sp_12"
@ -195,10 +196,11 @@
android:id="@+id/tv_member_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_free"
android:drawablePadding="@dimen/dp_8"
android:layout_marginHorizontal="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Exclusive Episodes"
@ -212,13 +214,14 @@
android:id="@+id/tv_member_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_exclusive"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:text="Daily free coins"
android:maxLines="2"
android:layout_marginHorizontal="@dimen/dp_8"
android:text="Daily free coins"
android:textColor="#c4c4c4"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toStartOf="@+id/tv_member_4"
@ -229,13 +232,14 @@
android:id="@+id/tv_member_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_only_coupons"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:text="VIP-Only Coupons"
android:layout_marginHorizontal="@dimen/dp_8"
android:maxLines="2"
android:text="VIP-Only Coupons"
android:textColor="#c4c4c4"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toEndOf="parent"

View File

@ -120,15 +120,28 @@
app:layout_constraintTop_toTopOf="@+id/iv_right_coin" />
<TextView
android:id="@+id/tv_coin_recharge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:drawableStart="@mipmap/ic_vip_member"
android:drawableEnd="@mipmap/ic_vip_member"
android:drawablePadding="@dimen/dp_20"
android:text="COIN RECHARGE"
android:textColor="#FCACB8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_right_coin" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_coin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_11"
android:layout_marginTop="@dimen/dp_14"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_right_coin" />
app:layout_constraintTop_toBottomOf="@+id/tv_coin_recharge" />
<TextView
android:id="@+id/tv_member_title"
@ -153,6 +166,7 @@
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_no_ads"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Ad-Free Streaming"
@ -170,6 +184,7 @@
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_free"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Exclusive Episodes"
@ -187,6 +202,7 @@
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_exclusive"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Daily free coins"
@ -204,6 +220,7 @@
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_only_coupons"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="VIP-Only Coupons"

View File

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.hjq.shape.layout.ShapeFrameLayout
android:layout_width="304dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/cl"
app:layout_constraintEnd_toEndOf="@id/cl"
app:layout_constraintStart_toStartOf="@id/cl"
app:layout_constraintTop_toTopOf="@id/cl"
app:shape_radius="@dimen/dp_16"
app:shape_solidColor="#50080b16" />
<net.center.blurview.ShapeBlurView
android:layout_width="304dp"
android:layout_height="0dp"
app:blur_border_color="#080b16"
app:blur_corner_radius="16dp"
app:blur_mode="rectangle"
app:blur_radius="10dp"
app:layout_constraintBottom_toBottomOf="@id/cl"
app:layout_constraintEnd_toEndOf="@id/cl"
app:layout_constraintStart_toStartOf="@id/cl"
app:layout_constraintTop_toTopOf="@id/cl" />
<com.hjq.shape.layout.ShapeConstraintLayout
android:id="@+id/cl"
android:layout_width="304dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shape_radius="@dimen/dp_16"
app:shape_solidColor="#95d9d9d9">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:src="@mipmap/iv_activate_vip"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_4"
android:paddingHorizontal="@dimen/dp_10"
android:gravity="center"
android:text="Unlock HD VIP Access!"
android:textColor="@color/white"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:paddingHorizontal="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_12"
android:gravity="center"
android:text="Activate vip and enjoy HD video privileges"
android:textColor="#C9C9C9"
android:textSize="@dimen/sp_12"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_later"
android:layout_width="123dp"
android:layout_height="@dimen/dp_42"
android:layout_marginLeft="26dp"
android:layout_marginTop="24dp"
android:layout_marginRight="26dp"
android:layout_marginBottom="20dp"
android:fontFamily="sans-serif-medium"
android:gravity="center"
android:text="Later"
android:singleLine="true"
android:textColor="@color/mireo_color_d2d2d2"
android:textSize="@dimen/sp_13"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_content"
app:shape_radius="@dimen/dp_30"
app:shape_strokeColor="@color/mireo_color_d2d2d2"
app:shape_strokeSize="@dimen/dp_1" />
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_open"
android:layout_width="123dp"
android:layout_height="@dimen/dp_42"
android:layout_marginLeft="26dp"
android:layout_marginTop="24dp"
android:layout_marginRight="26dp"
android:fontFamily="sans-serif-medium"
android:gravity="center"
android:text="Go"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_content"
app:shape_radius="@dimen/dp_30"
app:shape_solidGradientEndColor="#F24C92"
app:shape_solidGradientStartColor="#F8726D" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close_vip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/dp_14"
android:src="@mipmap/iv_example_close"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</com.hjq.shape.layout.ShapeConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_example_dialog_series"
android:paddingBottom="@dimen/dp_50"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_quality"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="24dp"
android:text="Playback Quality"
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_19"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_quality">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_quality_480"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_52"
android:gravity="center"
android:text="480p"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shape_radius="@dimen/dp_7"
app:shape_solidColor="#313337"
app:shape_strokeColor="@color/example_color_F56490"
app:shape_strokeSize="0dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_quality_720"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_52"
android:gravity="center"
android:text="720p"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shape_radius="@dimen/dp_7"
app:shape_solidColor="#313337"
app:shape_strokeColor="@color/example_color_F56490"
app:shape_strokeSize="0dp" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_login_tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_vip_tag"
app:layout_constraintStart_toStartOf="@+id/tv_quality_720"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_quality_1080"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_52"
android:gravity="center"
android:text="1080p"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shape_radius="@dimen/dp_7"
app:shape_solidColor="#313337"
app:shape_strokeColor="@color/example_color_F56490"
app:shape_strokeSize="0dp" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_vip_tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_vip_tag"
app:layout_constraintStart_toStartOf="@+id/tv_quality_1080"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -25,6 +25,7 @@
android:text="Go Premium Elevate Your Binge!"
android:textColor="#712B2B"
android:maxLines="2"
android:ellipsize="end"
android:textSize="@dimen/sp_17"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@ -53,6 +54,7 @@
android:drawablePadding="@dimen/dp_2"
android:gravity="center_horizontal"
android:maxLines="2"
android:ellipsize="end"
android:text="Ad-FreeStreaming"
android:textColor="#712B2B"
android:textSize="@dimen/sp_11"
@ -70,6 +72,7 @@
android:drawablePadding="@dimen/dp_2"
android:gravity="center_horizontal"
android:maxLines="2"
android:ellipsize="end"
android:text="Exclusive Episodes"
android:textColor="#712B2B"
android:textSize="@dimen/sp_11"
@ -87,6 +90,7 @@
android:drawablePadding="@dimen/dp_2"
android:gravity="center_horizontal"
android:maxLines="2"
android:ellipsize="end"
android:text="Daily free coins"
android:textColor="#712B2B"
android:textSize="@dimen/sp_11"
@ -105,6 +109,7 @@
android:drawablePadding="@dimen/dp_2"
android:gravity="center_horizontal"
android:maxLines="2"
android:ellipsize="end"
android:text="VIP-Only Coupons"
android:textColor="#712B2B"
android:textSize="@dimen/sp_11"

View File

@ -4,6 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rl"
android:layout_width="match_parent"
@ -17,12 +18,21 @@
app:layout_constraintRight_toRightOf="parent">
<com.hjq.shape.view.ShapeImageView
android:id="@+id/iv_img"
android:layout_width="@dimen/dp_69"
android:layout_height="@dimen/dp_94"
<androidx.cardview.widget.CardView
android:id="@+id/cardview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
app:shape_radius="@dimen/dp_10" />
app:cardCornerRadius="8dp"
app:cardElevation="0dp">
<com.hjq.shape.view.ShapeImageView
android:id="@+id/iv_img"
android:layout_width="@dimen/dp_69"
android:layout_height="@dimen/dp_94"
/>
</androidx.cardview.widget.CardView>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_name"
@ -31,7 +41,7 @@
android:layout_marginLeft="14dp"
android:layout_marginTop="7dp"
android:layout_toLeftOf="@+id/iv_close_dialog_series"
android:layout_toEndOf="@+id/iv_img"
android:layout_toEndOf="@+id/cardview"
android:text="Membership"
android:textColor="@color/white"
android:textSize="@dimen/sp_14" />
@ -43,7 +53,7 @@
android:layout_below="@+id/tv_name"
android:layout_marginLeft="14dp"
android:layout_marginTop="11dp"
android:layout_toEndOf="@+id/iv_img"
android:layout_toEndOf="@+id/cardview"
android:text="Total 80 Episodes"
android:textColor="#9D9D9D"
android:textSize="@dimen/sp_12" />
@ -55,7 +65,7 @@
android:layout_below="@+id/tv_total"
android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_15"
android:layout_toRightOf="@+id/iv_img"
android:layout_toRightOf="@+id/cardview"
android:paddingHorizontal="@dimen/dp_9"
android:paddingVertical="@dimen/dp_3"
android:text="sweet favor"
@ -87,7 +97,7 @@
android:id="@+id/tv_content_dialog_series"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/iv_img"
android:layout_below="@+id/cardview"
android:layout_marginHorizontal="@dimen/dp_17"
android:layout_marginTop="@dimen/sp_10"
android:lineSpacingExtra="@dimen/dp_2"

View File

@ -20,7 +20,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:textSize="@dimen/sp_12"
android:textSize="@dimen/sp_11"
android:singleLine="true"
app:shape_textColor="#888888"
app:shape_textSelectedColor="#F56490"

View File

@ -53,6 +53,7 @@
android:lineSpacingExtra="@dimen/dp_2"
android:minLines="2"
android:maxLines="2"
android:ellipsize="end"
android:text=""
android:textColor="@color/white"
android:textSize="@dimen/sp_12" />
@ -104,6 +105,7 @@
android:layout_toRightOf="@+id/iv_card"
android:lineSpacingExtra="@dimen/dp_2"
android:maxLines="2"
android:ellipsize="end"
android:text="On her wedding day, Lydia Murphy catches her fiance, Justin, cheati..."
android:textColor="#78D2D2D2"
android:textSize="@dimen/sp_10" />

View File

@ -54,6 +54,7 @@
android:layout_marginBottom="@dimen/dp_8"
android:lineSpacingExtra="@dimen/dp_2"
android:maxLines="2"
android:ellipsize="end"
android:text="He paid for salvation in blood—but the debt was never meant to be..."
android:textColor="@color/mireo_color_d2d2d2"
android:textSize="@dimen/sp_10"

View File

@ -78,6 +78,7 @@
android:layout_marginBottom="@dimen/dp_4"
android:lineSpacingExtra="@dimen/dp_2"
android:maxLines="2"
android:ellipsize="end"
android:text="Salvation Mispaid"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"

View File

@ -32,6 +32,7 @@
android:layout_marginBottom="@dimen/dp_4"
android:lineSpacingExtra="@dimen/dp_2"
android:maxLines="2"
android:ellipsize="end"
android:text="Salvation Mispaid"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"

View File

@ -33,6 +33,7 @@
android:layout_marginEnd="@dimen/dp_9"
android:layout_toRightOf="@+id/iv_card"
android:maxLines="2"
android:ellipsize="end"
android:text="Caged Marriage"
android:textColor="@color/white"
android:textSize="@dimen/sp_13" />
@ -47,6 +48,7 @@
android:layout_marginEnd="@dimen/dp_9"
android:layout_toRightOf="@+id/iv_card"
android:maxLines="2"
android:ellipsize="end"
android:text="Caged Marriage"
android:textColor="@color/example_color_9d9d9d"
android:textSize="@dimen/sp_12" />

View File

@ -248,6 +248,35 @@
app:layout_constraintTop_toBottomOf="@+id/sb_play_list" />
<com.localee.mireo.app.widget.layout.SettingBar
android:id="@+id/sb_order"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:background="@color/transparent"
app:bar_leftDrawable="@mipmap/iv_me_order"
app:bar_leftDrawablePadding="@dimen/dp_10"
app:bar_leftText="Order Record"
app:bar_leftTextColor="@color/white"
app:bar_lineVisible="false"
app:bar_rightDrawable="@mipmap/iv_me_right"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerView" />
<com.localee.mireo.app.widget.layout.SettingBar
android:id="@+id/sb_language"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:background="@color/transparent"
android:visibility="visible"
app:bar_leftDrawable="@mipmap/ic_me_language"
app:bar_leftDrawablePadding="@dimen/dp_10"
app:bar_leftText="Choose language"
app:bar_leftTextColor="@color/white"
app:bar_lineVisible="false"
app:bar_rightDrawable="@mipmap/iv_me_right"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sb_order" />
<com.localee.mireo.app.widget.layout.SettingBar
android:id="@+id/sb_setting"
android:layout_width="match_parent"
@ -260,7 +289,7 @@
app:bar_lineVisible="false"
app:bar_rightDrawable="@mipmap/iv_me_right"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerView" />
app:layout_constraintTop_toBottomOf="@+id/sb_language" />
<com.localee.mireo.app.widget.layout.SettingBar
android:id="@+id/sb_privacy"
@ -333,20 +362,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sb_about" />
<com.localee.mireo.app.widget.layout.SettingBar
android:id="@+id/sb_language"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:background="@color/transparent"
android:visibility="visible"
app:bar_leftDrawable="@mipmap/ic_me_language"
app:bar_leftDrawablePadding="@dimen/dp_10"
app:bar_leftText="Choose language"
app:bar_leftTextColor="@color/white"
app:bar_lineVisible="false"
app:bar_rightDrawable="@mipmap/iv_me_right"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sb_feedback" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

View File

@ -14,6 +14,7 @@
android:layout_centerHorizontal="true"
android:gravity="center"
android:maxLines="2"
android:ellipsize="end"
android:paddingVertical="@dimen/dp_12"
android:textSize="@dimen/sp_15"
app:shape_textColor="@color/white"

View File

@ -34,6 +34,7 @@
android:layout_marginTop="@dimen/dp_5"
android:layout_marginBottom="@dimen/dp_10"
android:maxLines="3"
android:ellipsize="end"
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
tools:text="提示语" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -7,8 +7,8 @@ android {
defaultConfig {
minSdk 24
targetSdk 34
versionName '1.1.2'
versionCode 10
versionName '1.2.0'
versionCode 12
}
compileOptions {