mirror of
https://github.com/lizongying/my-tv.git
synced 2026-10-26 22:26:29 +08:00
change style
This commit is contained in:
+24
@@ -1,5 +1,11 @@
|
|||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
|
### v1.8.0(通用)
|
||||||
|
|
||||||
|
* 修复返回键无法退出问题
|
||||||
|
* 设置中增加退出按钮
|
||||||
|
* 修改非电视上的样式
|
||||||
|
|
||||||
### v1.7.8(通用)
|
### v1.7.8(通用)
|
||||||
|
|
||||||
* 修复播放过程中的卡顿问题
|
* 修复播放过程中的卡顿问题
|
||||||
@@ -14,6 +20,24 @@
|
|||||||
* 临时去掉部分频道,提高频道的可用性
|
* 临时去掉部分频道,提高频道的可用性
|
||||||
* 部分频道增加节目单
|
* 部分频道增加节目单
|
||||||
|
|
||||||
|
### v1.7.5(安卓5及以上专用)
|
||||||
|
|
||||||
|
* 修复播放过程中的卡顿问题
|
||||||
|
* 增加时间显示
|
||||||
|
* 频道号优化
|
||||||
|
* 设置中增加退出按钮
|
||||||
|
|
||||||
|
### v1.7.4(通用)
|
||||||
|
|
||||||
|
* 修复368
|
||||||
|
|
||||||
|
### v1.7.3(安卓5及以上专用)
|
||||||
|
|
||||||
|
* 临时去掉部分频道,提高频道的可用性
|
||||||
|
* 部分频道增加节目单
|
||||||
|
* 遥控器左键进入节目列表
|
||||||
|
* 遥控器右键进入菜单
|
||||||
|
|
||||||
### v1.7.2(通用)
|
### v1.7.2(通用)
|
||||||
|
|
||||||
* 支持节目列表网格样式和行样式切换,软件重启后生效
|
* 支持节目列表网格样式和行样式切换,软件重启后生效
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ adb install my-tv.apk
|
|||||||
* CHC高清三个电影频道
|
* CHC高清三个电影频道
|
||||||
* 地方频道
|
* 地方频道
|
||||||
* 收藏夹
|
* 收藏夹
|
||||||
* 自定义源
|
|
||||||
* 海外
|
* 海外
|
||||||
* 1.5.0 无法安装,1.5.1 可以安装
|
* 1.5.0 无法安装,1.5.1 可以安装
|
||||||
* 节目增加预告
|
* 节目增加预告
|
||||||
@@ -42,6 +41,14 @@ adb install my-tv.apk
|
|||||||
* 亮度调节
|
* 亮度调节
|
||||||
* 音量调节
|
* 音量调节
|
||||||
|
|
||||||
|
## 版权说明
|
||||||
|
|
||||||
|
本项目仅供学习研究,禁止用于商业用途,请于下载二十四小时内删除。
|
||||||
|
|
||||||
|
本项目可能随时终止,请大家谨慎使用,建议使用官方渠道进行观看。
|
||||||
|
|
||||||
|
本项目使用的部分代码、图片、文字等资源来源于网络,如有侵权,请联系删除。
|
||||||
|
|
||||||
## 赞赏
|
## 赞赏
|
||||||
|
|
||||||

|

|
||||||
@@ -93,12 +93,14 @@ class CardAdapter(
|
|||||||
|
|
||||||
cardView.titleText = tvViewModel.getTV().title
|
cardView.titleText = tvViewModel.getTV().title
|
||||||
|
|
||||||
|
cardView.mainImageView?.let {
|
||||||
Glide.with(viewHolder.view.context)
|
Glide.with(viewHolder.view.context)
|
||||||
.load(tvViewModel.getTV().logo)
|
.load(tvViewModel.getTV().logo)
|
||||||
.centerInside()
|
.centerInside()
|
||||||
.into(cardView.mainImageView)
|
.into(it)
|
||||||
|
}
|
||||||
|
|
||||||
cardView.mainImageView.setBackgroundColor(Color.WHITE)
|
cardView.mainImageView?.setBackgroundColor(Color.WHITE)
|
||||||
cardView.setMainImageScaleType(ImageView.ScaleType.CENTER_INSIDE)
|
cardView.setMainImageScaleType(ImageView.ScaleType.CENTER_INSIDE)
|
||||||
|
|
||||||
val epg = tvViewModel.epg.value?.filter { it.beginTime < Utils.getDateTimestamp() }
|
val epg = tvViewModel.epg.value?.filter { it.beginTime < Utils.getDateTimestamp() }
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class ChannelFragment : Fragment() {
|
|||||||
private val handler = Handler()
|
private val handler = Handler()
|
||||||
private val delay: Long = 3000
|
private val delay: Long = 3000
|
||||||
private var channel = 0
|
private var channel = 0
|
||||||
|
private var channelCount = 0
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
@@ -23,6 +24,38 @@ class ChannelFragment : Fragment() {
|
|||||||
): View {
|
): View {
|
||||||
_binding = ChannelBinding.inflate(inflater, container, false)
|
_binding = ChannelBinding.inflate(inflater, container, false)
|
||||||
_binding!!.root.visibility = View.GONE
|
_binding!!.root.visibility = View.GONE
|
||||||
|
|
||||||
|
val activity = requireActivity()
|
||||||
|
val application = activity.applicationContext as MyApplication
|
||||||
|
val displayMetrics = application.getDisplayMetrics()
|
||||||
|
|
||||||
|
displayMetrics.density
|
||||||
|
|
||||||
|
var screenWidth = displayMetrics.widthPixels
|
||||||
|
var screenHeight = displayMetrics.heightPixels
|
||||||
|
if (screenHeight > screenWidth) {
|
||||||
|
screenWidth = displayMetrics.heightPixels
|
||||||
|
screenHeight = displayMetrics.widthPixels
|
||||||
|
}
|
||||||
|
|
||||||
|
val ratio = 16f / 9f
|
||||||
|
|
||||||
|
if (screenWidth / screenHeight > ratio) {
|
||||||
|
val x = ((screenWidth - screenHeight * ratio) / 2).toInt()
|
||||||
|
val originalLayoutParams =
|
||||||
|
binding.channel.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
originalLayoutParams.rightMargin += x
|
||||||
|
binding.channel.layoutParams = originalLayoutParams
|
||||||
|
}
|
||||||
|
|
||||||
|
if (screenWidth / screenHeight < ratio) {
|
||||||
|
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||||
|
val originalLayoutParams =
|
||||||
|
binding.channel.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
originalLayoutParams.topMargin += y
|
||||||
|
binding.channel.layoutParams = originalLayoutParams
|
||||||
|
}
|
||||||
|
|
||||||
(activity as MainActivity).fragmentReady("ChannelFragment")
|
(activity as MainActivity).fragmentReady("ChannelFragment")
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
@@ -30,20 +63,21 @@ class ChannelFragment : Fragment() {
|
|||||||
fun show(tvViewModel: TVViewModel) {
|
fun show(tvViewModel: TVViewModel) {
|
||||||
handler.removeCallbacks(hideRunnable)
|
handler.removeCallbacks(hideRunnable)
|
||||||
handler.removeCallbacks(playRunnable)
|
handler.removeCallbacks(playRunnable)
|
||||||
binding.channelContent.text = (tvViewModel.getTV().id.plus(1)).toString()
|
binding.content.text = (tvViewModel.getTV().id.plus(1)).toString()
|
||||||
view?.visibility = View.VISIBLE
|
view?.visibility = View.VISIBLE
|
||||||
handler.postDelayed(hideRunnable, delay)
|
handler.postDelayed(hideRunnable, delay)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun show(channel: String) {
|
fun show(channel: String) {
|
||||||
if (binding.channelContent.text.length > 1) {
|
if (channelCount > 1) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.channel = "${binding.channelContent.text}$channel".toInt()
|
channelCount++
|
||||||
|
this.channel = "${this.channel}$channel".toInt()
|
||||||
handler.removeCallbacks(hideRunnable)
|
handler.removeCallbacks(hideRunnable)
|
||||||
handler.removeCallbacks(playRunnable)
|
handler.removeCallbacks(playRunnable)
|
||||||
if (binding.channelContent.text == "") {
|
if (channelCount < 2) {
|
||||||
binding.channelContent.text = channel
|
binding.content.text = "${this.channel}"
|
||||||
view?.visibility = View.VISIBLE
|
view?.visibility = View.VISIBLE
|
||||||
handler.postDelayed(playRunnable, delay)
|
handler.postDelayed(playRunnable, delay)
|
||||||
} else {
|
} else {
|
||||||
@@ -65,14 +99,18 @@ class ChannelFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val hideRunnable = Runnable {
|
private val hideRunnable = Runnable {
|
||||||
binding.channelContent.text = ""
|
binding.content.text = ""
|
||||||
view?.visibility = View.GONE
|
view?.visibility = View.GONE
|
||||||
|
channel = 0
|
||||||
|
channelCount = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
private val playRunnable = Runnable {
|
private val playRunnable = Runnable {
|
||||||
(activity as MainActivity).play(channel - 1)
|
(activity as MainActivity).play(channel - 1)
|
||||||
binding.channelContent.text = ""
|
binding.content.text = ""
|
||||||
view?.visibility = View.GONE
|
view?.visibility = View.GONE
|
||||||
|
channel = 0
|
||||||
|
channelCount = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ val Context.appVersionCode: Long
|
|||||||
* Return the version name of the app which is defined in build.gradle.
|
* Return the version name of the app which is defined in build.gradle.
|
||||||
* eg:1.0.0
|
* eg:1.0.0
|
||||||
*/
|
*/
|
||||||
val Context.appVersionName: String get() = packageInfo.versionName ?: ""
|
val Context.appVersionName: String get() = packageInfo.versionName
|
||||||
|
|
||||||
val Context.appSignature: String
|
val Context.appSignature: String
|
||||||
get() {
|
get() {
|
||||||
|
|||||||
@@ -23,7 +23,31 @@ class InfoFragment : Fragment() {
|
|||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
_binding = InfoBinding.inflate(inflater, container, false)
|
_binding = InfoBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
|
val activity = requireActivity()
|
||||||
|
val application = activity.applicationContext as MyApplication
|
||||||
|
val displayMetrics = application.getDisplayMetrics()
|
||||||
|
|
||||||
|
displayMetrics.density
|
||||||
|
|
||||||
|
var screenWidth = displayMetrics.widthPixels
|
||||||
|
var screenHeight = displayMetrics.heightPixels
|
||||||
|
if (screenHeight > screenWidth) {
|
||||||
|
screenWidth = displayMetrics.heightPixels
|
||||||
|
screenHeight = displayMetrics.widthPixels
|
||||||
|
}
|
||||||
|
|
||||||
|
val ratio = 16f / 9f
|
||||||
|
|
||||||
|
if (screenWidth / screenHeight < ratio) {
|
||||||
|
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||||
|
val originalLayoutParams = binding.info.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
originalLayoutParams.bottomMargin += y
|
||||||
|
binding.info.layoutParams = originalLayoutParams
|
||||||
|
}
|
||||||
|
|
||||||
_binding!!.root.visibility = View.GONE
|
_binding!!.root.visibility = View.GONE
|
||||||
|
|
||||||
(activity as MainActivity).fragmentReady("InfoFragment")
|
(activity as MainActivity).fragmentReady("InfoFragment")
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ class MainActivity : FragmentActivity(), Request.RequestListener {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!settingFragment.isHidden) {
|
if (settingFragment.isVisible) {
|
||||||
hideSettingFragment()
|
hideSettingFragment()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,39 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
): View {
|
): View {
|
||||||
_binding = MenuBinding.inflate(inflater, container, false)
|
_binding = MenuBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
|
val activity = requireActivity()
|
||||||
|
val application = activity.applicationContext as MyApplication
|
||||||
|
val displayMetrics = application.getDisplayMetrics()
|
||||||
|
|
||||||
|
displayMetrics.density
|
||||||
|
|
||||||
|
var screenWidth = displayMetrics.widthPixels
|
||||||
|
var screenHeight = displayMetrics.heightPixels
|
||||||
|
if (screenHeight > screenWidth) {
|
||||||
|
screenWidth = displayMetrics.heightPixels
|
||||||
|
screenHeight = displayMetrics.widthPixels
|
||||||
|
}
|
||||||
|
|
||||||
|
val ratio = 16f / 9f
|
||||||
|
|
||||||
|
if (screenWidth / screenHeight > ratio) {
|
||||||
|
val x = ((screenWidth - screenHeight * ratio) / 2).toInt()
|
||||||
|
val originalLayoutParams =
|
||||||
|
binding.scroll.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
originalLayoutParams.leftMargin += x
|
||||||
|
originalLayoutParams.rightMargin += x
|
||||||
|
binding.scroll.layoutParams = originalLayoutParams
|
||||||
|
}
|
||||||
|
|
||||||
|
if (screenWidth / screenHeight < ratio) {
|
||||||
|
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||||
|
val originalLayoutParams =
|
||||||
|
binding.scroll.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
originalLayoutParams.topMargin += y
|
||||||
|
originalLayoutParams.bottomMargin += y
|
||||||
|
binding.scroll.layoutParams = originalLayoutParams
|
||||||
|
}
|
||||||
|
|
||||||
binding.menu.setOnClickListener {
|
binding.menu.setOnClickListener {
|
||||||
hideSelf()
|
hideSelf()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
package com.lizongying.mytv
|
package com.lizongying.mytv
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.DisplayMetrics
|
||||||
|
import android.view.WindowManager
|
||||||
|
|
||||||
class MyApplication : Application() {
|
class MyApplication : Application() {
|
||||||
|
private lateinit var displayMetrics: DisplayMetrics
|
||||||
|
|
||||||
|
override fun onCreate() {
|
||||||
|
super.onCreate()
|
||||||
|
|
||||||
|
displayMetrics = DisplayMetrics()
|
||||||
|
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||||
|
// windowManager.defaultDisplay.getRealMetrics(displayMetrics)
|
||||||
|
windowManager.defaultDisplay.getMetrics(displayMetrics)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getDisplayMetrics(): DisplayMetrics {
|
||||||
|
return displayMetrics
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -590,7 +590,7 @@ object Request {
|
|||||||
val randomNumber = Random.nextDouble()
|
val randomNumber = Random.nextDouble()
|
||||||
val url = tvModel.getTV().videoUrl.first()
|
val url = tvModel.getTV().videoUrl.first()
|
||||||
|
|
||||||
var r = KvcollectRequest(
|
val r = KvcollectRequest(
|
||||||
guid = guid,
|
guid = guid,
|
||||||
prog = sid,
|
prog = sid,
|
||||||
viewid = sid,
|
viewid = sid,
|
||||||
@@ -605,27 +605,10 @@ object Request {
|
|||||||
_dc = randomNumber,
|
_dc = randomNumber,
|
||||||
)
|
)
|
||||||
|
|
||||||
var e =
|
val e =
|
||||||
"BossId=${r.BossId}&Pwd=${r.Pwd}&_dc=${r._dc}&cdn=${r.cdn}&cmd=${r.cmd}&defn=${r.defn}&downspeed=${r.downspeed}&durl=${r.durl}&errcode=${r.errcode}&fact1=${r.fact1}&firstreport=${r.firstreport}&fplayerver=${r.fplayerver}&ftime=${r.ftime}&geturltime=6&guid=${r.guid}&hc_openid=${r.hc_openid}&hh_ua=${r.hh_ua}&live_type=${r.live_type}&livepid=${r.livepid}&login_type=${r.login_type}&open_id=&openid=${r.openid}&platform=${r.platform}&playno=${r.playno}&prd=${r.prd}&prog=${r.prog}&rand_str=${r.rand_str}&sRef=${r.sRef}&sUrl=${r.sUrl}&sdtfrom=${r.sdtfrom}&seq=${r.seq}&url=${r.url}&viewid=${r.viewid}"
|
"BossId=${r.BossId}&Pwd=${r.Pwd}&_dc=${r._dc}&cdn=${r.cdn}&cmd=${r.cmd}&defn=${r.defn}&downspeed=${r.downspeed}&durl=${r.durl}&errcode=${r.errcode}&fact1=${r.fact1}&firstreport=${r.firstreport}&fplayerver=${r.fplayerver}&ftime=${r.ftime}&geturltime=6&guid=${r.guid}&hc_openid=${r.hc_openid}&hh_ua=${r.hh_ua}&live_type=${r.live_type}&livepid=${r.livepid}&login_type=${r.login_type}&open_id=&openid=${r.openid}&platform=${r.platform}&playno=${r.playno}&prd=${r.prd}&prog=${r.prog}&rand_str=${r.rand_str}&sRef=${r.sRef}&sUrl=${r.sUrl}&sdtfrom=${r.sdtfrom}&seq=${r.seq}&url=${r.url}&viewid=${r.viewid}"
|
||||||
println(e)
|
|
||||||
r.signature = YSP.getAuthSignature(e)
|
r.signature = YSP.getAuthSignature(e)
|
||||||
println(r.signature)
|
callBtracePage = yspBtraceService2.kvcollect2(r)
|
||||||
|
|
||||||
// val ttt = """{"BossId":2727,"Pwd":1424084450,"prog":"2022576801","playno":"BEoZw3cpZh","guid":"luccvoyr_58va8i3cqw6","hh_ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36","cdn":"waibao","sdtfrom":"ysp_pc_01","prd":60000,"platform":"5910204","errcode":"","durl":"https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1","firstreport":1,"sUrl":"https://www.yangshipin.cn/#/tv/home?pid=600001859","sRef":"","fplayerver":"100","livepid":"600001859","viewid":"2022576801","seq":0,"cmd":263,"login_type":"","geturltime":6,"downspeed":1.75,"hc_openid":"","open_id":"","defn":"fhd","fact1":"ysp_pc_live_b","openid":"","_dc":0.7140416315131102,"live_type":"","ftime":"2024-04-17 22:58:31","url":"https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1","rand_str":"oKkkZs8lON"}"""
|
|
||||||
// val gson = Gson()
|
|
||||||
// r = gson.fromJson(ttt, KvcollectRequest::class.java)
|
|
||||||
//
|
|
||||||
// e =
|
|
||||||
// "BossId=${r.BossId}&Pwd=${r.Pwd}&_dc=${r._dc}&cdn=${r.cdn}&cmd=${r.cmd}&defn=${r.defn}&downspeed=${r.downspeed}&durl=${r.durl}&errcode=${r.errcode}&fact1=${r.fact1}&firstreport=${r.firstreport}&fplayerver=${r.fplayerver}&ftime=${r.ftime}&geturltime=6&guid=${r.guid}&hc_openid=${r.hc_openid}&hh_ua=${r.hh_ua}&live_type=${r.live_type}&livepid=${r.livepid}&login_type=${r.login_type}&open_id=&openid=${r.openid}&platform=${r.platform}&playno=${r.playno}&prd=${r.prd}&prog=${r.prog}&rand_str=${r.rand_str}&sRef=${r.sRef}&sUrl=${r.sUrl}&sdtfrom=${r.sdtfrom}&seq=${r.seq}&url=${r.url}&viewid=${r.viewid}"
|
|
||||||
// println(e)
|
|
||||||
// e = "BossId=2727&Pwd=1424084450&_dc=0.7140416315131102&cdn=waibao&cmd=263&defn=fhd&downspeed=1.75&durl=https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1&errcode=&fact1=ysp_pc_live_b&firstreport=1&fplayerver=100&ftime=2024-04-17 22:58:31&geturltime=6&guid=luccvoyr_58va8i3cqw6&hc_openid=&hh_ua=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36&live_type=&livepid=600001859&login_type=&open_id=&openid=&platform=5910204&playno=BEoZw3cpZh&prd=60000&prog=2022576801&rand_str=oKkkZs8lON&sRef=&sUrl=https://www.yangshipin.cn/#/tv/home?pid=600001859&sdtfrom=ysp_pc_01&seq=0&url=https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1&viewid=2022576801"
|
|
||||||
// println(e)
|
|
||||||
// r.signature = YSP.getAuthSignature(e)
|
|
||||||
// println(r.signature)
|
|
||||||
|
|
||||||
callBtracePage = yspBtraceService2.kvcollect2(
|
|
||||||
r
|
|
||||||
)
|
|
||||||
callBtracePage?.enqueue(object : Callback<Void> {
|
callBtracePage?.enqueue(object : Callback<Void> {
|
||||||
override fun onResponse(call: Call<Void>, response: Response<Void>) {
|
override fun onResponse(call: Call<Void>, response: Response<Void>) {
|
||||||
if (response.isSuccessful) {
|
if (response.isSuccessful) {
|
||||||
|
|||||||
@@ -87,6 +87,10 @@ class SettingFragment : DialogFragment() {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
binding.exit.setOnClickListener{
|
||||||
|
requireActivity().finishAffinity()
|
||||||
|
}
|
||||||
|
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,36 @@ class TimeFragment : Fragment() {
|
|||||||
): View {
|
): View {
|
||||||
Log.i(TAG, "onCreateView")
|
Log.i(TAG, "onCreateView")
|
||||||
_binding = TimeBinding.inflate(inflater, container, false)
|
_binding = TimeBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
|
val activity = requireActivity()
|
||||||
|
val application = activity.applicationContext as MyApplication
|
||||||
|
val displayMetrics = application.getDisplayMetrics()
|
||||||
|
|
||||||
|
displayMetrics.density
|
||||||
|
|
||||||
|
var screenWidth = displayMetrics.widthPixels
|
||||||
|
var screenHeight = displayMetrics.heightPixels
|
||||||
|
if (screenHeight > screenWidth) {
|
||||||
|
screenWidth = displayMetrics.heightPixels
|
||||||
|
screenHeight = displayMetrics.widthPixels
|
||||||
|
}
|
||||||
|
|
||||||
|
val ratio = 16f / 9f
|
||||||
|
|
||||||
|
if (screenWidth / screenHeight > ratio) {
|
||||||
|
val x = ((screenWidth - screenHeight * ratio) / 2).toInt()
|
||||||
|
val originalLayoutParams = binding.time.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
originalLayoutParams.rightMargin += x
|
||||||
|
binding.time.layoutParams = originalLayoutParams
|
||||||
|
}
|
||||||
|
|
||||||
|
if (screenWidth / screenHeight < ratio) {
|
||||||
|
val y = ((screenHeight - screenWidth / ratio) / 2).toInt()
|
||||||
|
val originalLayoutParams = binding.time.layoutParams as ViewGroup.MarginLayoutParams
|
||||||
|
originalLayoutParams.topMargin += y
|
||||||
|
binding.time.layoutParams = originalLayoutParams
|
||||||
|
}
|
||||||
|
|
||||||
(activity as MainActivity).fragmentReady("TimeFragment")
|
(activity as MainActivity).fragmentReady("TimeFragment")
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
@@ -42,7 +72,7 @@ class TimeFragment : Fragment() {
|
|||||||
|
|
||||||
private val showRunnable: Runnable = Runnable {
|
private val showRunnable: Runnable = Runnable {
|
||||||
run {
|
run {
|
||||||
binding.channelContent.text = getDateFormat("HH:mm")
|
binding.content.text = getDateFormat("HH:mm")
|
||||||
handler.postDelayed(showRunnable, delay)
|
handler.postDelayed(showRunnable, delay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,5 +77,15 @@ object Utils {
|
|||||||
).toInt()
|
).toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun pxToDp(px: Float): Int {
|
||||||
|
val scale = Resources.getSystem().displayMetrics.density
|
||||||
|
return (px / scale).toInt()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun pxToDp(px: Int): Int {
|
||||||
|
val scale = Resources.getSystem().displayMetrics.density
|
||||||
|
return (px / scale).toInt()
|
||||||
|
}
|
||||||
|
|
||||||
fun isTmallDevice() = Build.MANUFACTURER.equals("Tmall", ignoreCase = true)
|
fun isTmallDevice() = Build.MANUFACTURER.equals("Tmall", ignoreCase = true)
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/channel_fragment"
|
android:id="@+id/channel"
|
||||||
android:layout_width="90dp"
|
android:layout_width="90dp"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"
|
||||||
android:layout_gravity="end|top"
|
android:layout_gravity="end|top"
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
android:layout_marginEnd="170dp">
|
android:layout_marginEnd="170dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/channel_content"
|
android:id="@+id/content"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/info_fragment"
|
android:id="@+id/info"
|
||||||
android:layout_width="320dp"
|
android:layout_width="320dp"
|
||||||
android:layout_height="80dp"
|
android:layout_height="80dp"
|
||||||
android:layout_gravity="center_horizontal|bottom"
|
android:layout_gravity="center_horizontal|bottom"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
android:focusable="false"
|
android:focusable="false"
|
||||||
>
|
>
|
||||||
<ScrollView
|
<ScrollView
|
||||||
android:id="@+id/scroll_view"
|
android:id="@+id/scroll"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:id="@+id/player_fragment"
|
android:id="@+id/player"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@color/black"
|
android:background="@color/black"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="start"
|
android:layout_gravity="start"
|
||||||
android:layout_marginTop="0dp"
|
android:layout_marginTop="0dp"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="20dp"
|
||||||
android:layout_marginBottom="5dp"
|
android:layout_marginBottom="5dp"
|
||||||
android:gravity="start"
|
android:gravity="start"
|
||||||
android:textColor="#FFEEEEEE"
|
android:textColor="#FFEEEEEE"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/dialog"
|
android:id="@+id/setting"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
>
|
>
|
||||||
@@ -51,35 +51,41 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
<Button
|
||||||
|
android:id="@+id/exit"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:text="@string/exit"
|
||||||
|
/>
|
||||||
<Switch
|
<Switch
|
||||||
android:id="@+id/switch_channel_reversal"
|
android:id="@+id/switch_channel_reversal"
|
||||||
android:text="@string/title_channel_reversal"
|
android:text="@string/title_channel_reversal"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
<Switch
|
<Switch
|
||||||
android:id="@+id/switch_channel_num"
|
android:id="@+id/switch_channel_num"
|
||||||
android:text="@string/title_channel_num"
|
android:text="@string/title_channel_num"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
<Switch
|
<Switch
|
||||||
android:id="@+id/switch_time"
|
android:id="@+id/switch_time"
|
||||||
android:text="@string/title_time"
|
android:text="@string/title_time"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
<Switch
|
<Switch
|
||||||
android:id="@+id/switch_boot_startup"
|
android:id="@+id/switch_boot_startup"
|
||||||
android:text="@string/title_boot_startup"
|
android:text="@string/title_boot_startup"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
<Switch
|
<Switch
|
||||||
android:id="@+id/switch_grid"
|
android:id="@+id/switch_grid"
|
||||||
android:text="@string/title_grid"
|
android:text="@string/title_grid"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -2,18 +2,18 @@
|
|||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/time"
|
android:id="@+id/time"
|
||||||
android:layout_width="100dp"
|
android:layout_width="100dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="40dp"
|
||||||
android:layout_gravity="end|top"
|
android:layout_gravity="end|top"
|
||||||
android:layout_marginTop="25dp"
|
android:layout_marginTop="25dp"
|
||||||
android:layout_marginEnd="50dp">
|
android:layout_marginEnd="50dp">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/channel_content"
|
android:id="@+id/content"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
android:layout_marginTop="0dp"
|
android:layout_marginTop="0dp"
|
||||||
android:textColor="#FFEEEEEE"
|
android:textColor="#FFEEEEEE"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textSize="34sp" />
|
android:textSize="32sp" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
@@ -6,4 +6,5 @@
|
|||||||
<string name="title_boot_startup">开机自启</string>
|
<string name="title_boot_startup">开机自启</string>
|
||||||
<string name="title_grid">频道列表采用网格样式</string>
|
<string name="title_grid">频道列表采用网格样式</string>
|
||||||
<string name="title_time">显示时间</string>
|
<string name="title_time">显示时间</string>
|
||||||
|
<string name="exit">退出</string>
|
||||||
</resources>
|
</resources>
|
||||||
Reference in New Issue
Block a user