From 7e57aa8c03be50c4e5f30ee0d1c450845eaae077 Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Thu, 16 May 2024 14:37:16 +0800 Subject: [PATCH] fix error in playing --- HISTORY.md | 6 ++++++ Makefile | 2 +- README.md | 4 ++-- app/build.gradle | 11 +++++++--- .../java/com/lizongying/mytv/MainActivity.kt | 16 +++++++++++---- .../java/com/lizongying/mytv/MainFragment.kt | 16 +++++++++++++++ .../mytv/OnSharedPreferenceChangeListener.kt | 6 ++++++ .../com/lizongying/mytv/PlayerFragment.kt | 7 +++++++ app/src/main/java/com/lizongying/mytv/SP.kt | 17 +++++++++++++--- .../com/lizongying/mytv/SettingFragment.kt | 7 ++++--- .../java/com/lizongying/mytv/UpdateManager.kt | 1 - .../lizongying/mytv/api/KvcollectRequest.kt | 20 +++++++++---------- .../lizongying/mytv/api/YSPBtraceService.kt | 12 +++++------ .../com/lizongying/mytv/requests/Request.kt | 20 +++++++++---------- version.json | 2 +- 15 files changed, 103 insertions(+), 44 deletions(-) create mode 100644 app/src/main/java/com/lizongying/mytv/OnSharedPreferenceChangeListener.kt diff --git a/HISTORY.md b/HISTORY.md index f2828aac..8350a291 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,11 @@ ## 更新日志 +### v2.0.0 + +* 解决卡顿问题 +* 解决网格样式时,点击空白处不退出的问题 +* 解决频道列表样式切换可能不生效的问题 + ### v1.9.8(通用) * 优化在线升级 diff --git a/Makefile b/Makefile index 681568ed..875ad50e 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,6 @@ gen-version: git describe --tags --always git describe --tags --always | sed 's/v/ /g' | sed 's/\./ /g' | sed 's/-/ /g' | awk '{print ($$1*16777216)+($$2*65536)+($$3*256)+$$4}' -#make gen v=v1.1.3 +#make gen v=v2.0.0 gen: echo $(v) | sed 's/v/ /g' | sed 's/\./ /g' | sed 's/-/ /g' | awk '{print "{\"version_code\": " ($$1*16777216)+($$2*65536)+($$3*256)+$$4 ", \"version_name\": \"" "$(v)" "\"}"}' > version.json \ No newline at end of file diff --git a/README.md b/README.md index 663e6211..bab6570b 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ ## TODO * 音量不同 -* 大湾区卫视、广东4k超高清、广东珠江、三沙卫视 +* 大湾区卫视、广东4k超高清、广东珠江、三沙卫视、翡翠 * CHC高清三个电影频道 * 地方频道 * 收藏夹 @@ -35,7 +35,7 @@ * 亮度调节 * 音量调节 * 軟解 -* 自動更新 +* 网格空白处退出 ## 版权说明 diff --git a/app/build.gradle b/app/build.gradle index 25f9fa47..06a70706 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,10 +77,9 @@ static def VersionCode() { def replace = [v: "", ".": " ", "-": " "] def arr = (process.text.trim().replace(replace) + " 0").split(" ") def versionCode = arr[0].toInteger() * 16777216 + arr[1].toInteger() * 65536 + arr[2].toInteger() * 256 + arr[3].toInteger() - println("VersionCode $versionCode") return versionCode } catch (ignored) { - return 0 + return 1 } } @@ -88,13 +87,19 @@ static def VersionName() { try { def process = "git describe --tags --always".execute() process.waitFor() - return process.text.trim() - "v" + def versionName = process.text.trim() - "v" + if (versionName.isEmpty()) { + versionName = "1.0.0" + } + return versionName } catch (ignored) { return "1.0.0" } } dependencies { + +// minSdk17 def media3_version = "1.2.1" implementation "androidx.media3:media3-ui:$media3_version" diff --git a/app/src/main/java/com/lizongying/mytv/MainActivity.kt b/app/src/main/java/com/lizongying/mytv/MainActivity.kt index 3c5584dd..2312b5f9 100644 --- a/app/src/main/java/com/lizongying/mytv/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv/MainActivity.kt @@ -25,7 +25,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.launch -class MainActivity : FragmentActivity(), Request.RequestListener { +class MainActivity : FragmentActivity(), Request.RequestListener, OnSharedPreferenceChangeListener { private var ready = 0 private val playerFragment = PlayerFragment() @@ -122,6 +122,8 @@ class MainActivity : FragmentActivity(), Request.RequestListener { // Log.i(TAG, "net ${Build.VERSION.SDK_INT}") // ready++ // } + + SP.setOnSharedPreferenceChangeListener(this) } fun showInfoFragment(tvViewModel: TVViewModel) { @@ -358,8 +360,6 @@ class MainActivity : FragmentActivity(), Request.RequestListener { private val hideSetting = Runnable { if (settingFragment.isVisible) { settingFragment.dismiss() - showTime() - mainFragment.changeMenu() } } @@ -499,7 +499,7 @@ class MainActivity : FragmentActivity(), Request.RequestListener { } KeyEvent.KEYCODE_UNKNOWN -> { - showSetting() +// showSetting() return true } @@ -612,4 +612,12 @@ class MainActivity : FragmentActivity(), Request.RequestListener { private companion object { const val TAG = "MainActivity" } + + override fun onSharedPreferenceChanged(key: String) { + Log.i(TAG, "$key changed") + when (key) { + SP.KEY_GRID -> mainFragment.changeMenu() + SP.KEY_TIME -> showTime() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index 1e19168f..6ad41fa7 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.util.Log import android.view.KeyEvent import android.view.LayoutInflater +import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.widget.Toast @@ -134,6 +135,21 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { hideSelf() } + itemBinding.items.addOnItemTouchListener(object : RecyclerView.OnItemTouchListener { + override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { + hideSelf() + return false + } + + override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) { + TODO("Not yet implemented") + } + + override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { + TODO("Not yet implemented") + } + }) + val layoutParamsHeader = itemBinding.header.layoutParams as ViewGroup.MarginLayoutParams layoutParamsHeader.topMargin = application.px2Px(itemBinding.header.marginTop) diff --git a/app/src/main/java/com/lizongying/mytv/OnSharedPreferenceChangeListener.kt b/app/src/main/java/com/lizongying/mytv/OnSharedPreferenceChangeListener.kt new file mode 100644 index 00000000..47090b33 --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/OnSharedPreferenceChangeListener.kt @@ -0,0 +1,6 @@ +package com.lizongying.mytv + + +interface OnSharedPreferenceChangeListener { + fun onSharedPreferenceChanged(key: String) +} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt index cfb3f882..bf3a228a 100644 --- a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt @@ -15,6 +15,7 @@ import androidx.media3.common.PlaybackException import androidx.media3.common.Player import androidx.media3.common.VideoSize import androidx.media3.common.util.UnstableApi +import androidx.media3.exoplayer.DefaultRenderersFactory import androidx.media3.exoplayer.ExoPlayer import androidx.media3.ui.PlayerView import com.google.android.exoplayer2.SimpleExoPlayer @@ -52,10 +53,16 @@ class PlayerFragment : Fragment(), SurfaceHolder.Callback { playerView?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { + @OptIn(UnstableApi::class) override fun onGlobalLayout() { playerView!!.viewTreeObserver.removeOnGlobalLayoutListener(this) + +// val renderersFactory = context?.let { DefaultRenderersFactory(it) } +// renderersFactory?.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON) + playerView!!.player = activity?.let { ExoPlayer.Builder(it) +// .setRenderersFactory(renderersFactory!!) .build() } playerView!!.player?.playWhenReady = true diff --git a/app/src/main/java/com/lizongying/mytv/SP.kt b/app/src/main/java/com/lizongying/mytv/SP.kt index 70f3d763..3f16a01b 100644 --- a/app/src/main/java/com/lizongying/mytv/SP.kt +++ b/app/src/main/java/com/lizongying/mytv/SP.kt @@ -13,12 +13,12 @@ object SP { // If use channel num to select channel or not private const val KEY_CHANNEL_NUM = "channel_num" - private const val KEY_TIME = "time" + const val KEY_TIME = "time" // If start app on device boot or not private const val KEY_BOOT_STARTUP = "boot_startup" - private const val KEY_GRID = "grid" + const val KEY_GRID = "grid" // Position in list of the selected channel item private const val KEY_POSITION = "position" @@ -28,6 +28,8 @@ object SP { private lateinit var sp: SharedPreferences + private var listener: OnSharedPreferenceChangeListener? = null + /** * The method must be invoked as early as possible(At least before using the keys) */ @@ -35,6 +37,10 @@ object SP { sp = context.getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE) } + fun setOnSharedPreferenceChangeListener(listener: OnSharedPreferenceChangeListener) { + this.listener = listener + } + var channelReversal: Boolean get() = sp.getBoolean(KEY_CHANNEL_REVERSAL, false) set(value) = sp.edit().putBoolean(KEY_CHANNEL_REVERSAL, value).apply() @@ -53,7 +59,12 @@ object SP { var grid: Boolean get() = sp.getBoolean(KEY_GRID, false) - set(value) = sp.edit().putBoolean(KEY_GRID, value).apply() + set(value) { + if (value != this.grid) { + sp.edit().putBoolean(KEY_GRID, value).apply() + listener?.onSharedPreferenceChanged(KEY_GRID) + } + } var itemPosition: Int get() = sp.getInt(KEY_POSITION, 0) diff --git a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt index 40da69ef..ee425240 100644 --- a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt @@ -161,6 +161,8 @@ class SettingFragment : DialogFragment() { requireActivity().finishAffinity() } + updateManager = UpdateManager(context, context.appVersionCode) + return binding.root } @@ -197,7 +199,7 @@ class SettingFragment : DialogFragment() { PERMISSIONS_REQUEST_CODE ) } else { - UpdateManager(context, context.appVersionCode).checkAndUpdate() + updateManager.checkAndUpdate() } } @@ -216,8 +218,7 @@ class SettingFragment : DialogFragment() { } } if (allPermissionsGranted) { - val context = requireContext() - UpdateManager(context, context.appVersionCode).checkAndUpdate() + updateManager.checkAndUpdate() } else { Toast.makeText(context, "权限授权失败", Toast.LENGTH_LONG).show() } diff --git a/app/src/main/java/com/lizongying/mytv/UpdateManager.kt b/app/src/main/java/com/lizongying/mytv/UpdateManager.kt index 0cb44bec..6d5ecc03 100644 --- a/app/src/main/java/com/lizongying/mytv/UpdateManager.kt +++ b/app/src/main/java/com/lizongying/mytv/UpdateManager.kt @@ -64,7 +64,6 @@ class UpdateManager( private fun startDownload(release: ReleaseResponse) { val apkName = "my-tv" val apkFileName = "$apkName-${release.version_name}.apk" - Log.i(TAG, "apkFileName $apkFileName") val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager val request = diff --git a/app/src/main/java/com/lizongying/mytv/api/KvcollectRequest.kt b/app/src/main/java/com/lizongying/mytv/api/KvcollectRequest.kt index 2079d271..13ede035 100644 --- a/app/src/main/java/com/lizongying/mytv/api/KvcollectRequest.kt +++ b/app/src/main/java/com/lizongying/mytv/api/KvcollectRequest.kt @@ -1,17 +1,17 @@ package com.lizongying.mytv.api data class KvcollectRequest( - val BossId: Int = 2727, - val Pwd: Int = 1424084450, + val BossId: Int = 99150, + val Pwd: Int = 1999332929, val cdn: String = "waibao", val cmd: Int = 263, val defn: String = "fhd", - val downspeed: Double = 10.0, + val downspeed: Int = 10, val durl: String = "", // val errcode: String = "", val fact1: String = "ysp_pc_live_b", val firstreport: Int = 0, - val fplayerver: String = "100", + val fplayerver: String = "180", val ftime: String = "", // val geturltime: Int = 0, val guid: String = "", // @@ -39,17 +39,17 @@ data class KvcollectRequest( data class KvcollectRequest2( - val BossId: Int = 2727, - val Pwd: Int = 1424084450, + val BossId: Int = 99150, + val Pwd: Int = 1999332929, val cdn: String = "waibao", val cmd: Int = 263, val defn: String = "fhd", - val downspeed: String = "10", + val downspeed: Int = 10, val durl: String = "", // val errcode: String = "", val fact1: String = "ysp_pc_live_b", val firstreport: Int = 0, - val fplayerver: String = "100", + val fplayerver: String = "180", val ftime: String = "", // val geturltime: Int = 0, val guid: String = "", // @@ -68,9 +68,9 @@ data class KvcollectRequest2( val sRef: String = "", val sUrl: String = "", // val sdtfrom: String = "ysp_pc_01", - val seq: Int = 9, // + val seq: Int = 0, // var signature: String = "", val url: String = "", // val viewid: String = "", // - val _dc: Double = 0.0, + val _dc: String = "", ) \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/YSPBtraceService.kt b/app/src/main/java/com/lizongying/mytv/api/YSPBtraceService.kt index 7d40f0c5..7fb40c08 100644 --- a/app/src/main/java/com/lizongying/mytv/api/YSPBtraceService.kt +++ b/app/src/main/java/com/lizongying/mytv/api/YSPBtraceService.kt @@ -87,8 +87,8 @@ interface YSPBtraceService { "referer: https://www.yangshipin.cn/", ) fun kvcollect3( - @Field("BossId") BossId: String = "9141", - @Field("Pwd") Pwd: String = "1137850982", + @Field("BossId") BossId: String = "9150", + @Field("Pwd") Pwd: String = "1999332929", @Field("prog") prog: String = "", // @Field("playno") playno: String = "", // @Field("guid") guid: String = "", // @@ -102,7 +102,7 @@ interface YSPBtraceService { @Field("firstreport") firstreport: String = "-", @Field("sUrl") sUrl: String = "", // @Field("sRef") sRef: String = "-", - @Field("fplayerver") fplayerver: String = "100", + @Field("fplayerver") fplayerver: String = "180", @Field("livepid") livepid: String = "", @Field("viewid") viewid: String = "", @Field("seq") seq: String = "", @@ -118,8 +118,8 @@ interface YSPBtraceService { @Field("_dc") _dc: String = "", @Field("live_type") live_type: String = "-", @Field("ftime") ftime: String = "", - @Field("url") url: String = "", - @Field("rand_str") rand_str: String = "", // - @Field("signature") signature: String = "", +// @Field("url") url: String = "", +// @Field("rand_str") rand_str: String = "", // +// @Field("signature") signature: String = "", ): Call } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/requests/Request.kt b/app/src/main/java/com/lizongying/mytv/requests/Request.kt index e4c5e8a6..554a604f 100644 --- a/app/src/main/java/com/lizongying/mytv/requests/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/requests/Request.kt @@ -700,7 +700,7 @@ object Request { seq = tvModel.seq, durl = url, url = url, - _dc = randomNumber, +// _dc = "", ) val e = @@ -732,7 +732,7 @@ object Request { val guid = YSP.getGuid() val pid = tvModel.getTV().pid val sid = tvModel.getTV().sid - val randomNumber = Random.nextDouble() +// val randomNumber = Random.nextDouble() val url = tvModel.getTV().videoUrl.first() val r = KvcollectRequest2( @@ -747,12 +747,12 @@ object Request { seq = tvModel.seq, durl = url, url = url, - _dc = randomNumber, + _dc = "", ) - 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=${r.geturltime}&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=${r.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}" - r.signature = YSP.getAuthSignature(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=${r.geturltime}&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=${r.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}" +// r.signature = YSP.getAuthSignature(e) callBtracePage = yspBtraceService3.kvcollect3( guid = r.guid, @@ -761,18 +761,18 @@ object Request { livepid = r.livepid, sUrl = r.sUrl, playno = r.playno, - rand_str = r.rand_str, +// rand_str = r.rand_str, ftime = r.ftime, seq = "${r.seq}", durl = r.durl, - url = r.url, +// url = r.url, _dc = "${r._dc}", - signature = r.signature +// signature = r.signature ) callBtracePage?.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful) { - Log.d(TAG, "$title kvcollect success") + Log.i(TAG, "$title kvcollect success") } else { Log.e(TAG, "$title kvcollect status error") } diff --git a/version.json b/version.json index 88ab9fe8..bce610df 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version_code": 17369088, "version_name": "v1.9.8"} +{"version_code": 33554432, "version_name": "v2.0.0"}