Compare commits

..
4 Commits
Author SHA1 Message Date
Li ZongYing eac355a1c1 fix black screen 2024-06-07 17:49:49 +08:00
Li ZongYing 6c6736fd0a gradle lib version 2024-06-07 17:22:42 +08:00
Li ZongYing f4c1db33b3 ysp 2024-06-07 13:13:05 +08:00
Li ZongYing e55584c910 Balanced sounds 2024-06-03 18:17:43 +08:00
28 changed files with 283 additions and 86 deletions
+8
View File
@@ -1,5 +1,13 @@
## 更新日誌 ## 更新日誌
### v2.1.4
* 解決切換頻道時黑屏問題
### v2.1.1
* 平衡聲音
### v2.1.0 ### v2.1.0
* 恢復播放 * 恢復播放
+1
View File
@@ -4,3 +4,4 @@
/CMakeFiles/ /CMakeFiles/
/Makefile /Makefile
/src/main/cpp/native.c /src/main/cpp/native.c
/src/main/cpp/aes.c
+3 -1
View File
@@ -21,7 +21,9 @@ if (IS_SO_BUILD)
SHARED SHARED
# Provides a relative path to your source file(s). # Provides a relative path to your source file(s).
src/main/cpp/native.c) src/main/cpp/native.c
src/main/cpp/aes.c
)
# 设置编译输出路径 # 设置编译输出路径
set_target_properties( set_target_properties(
+21 -48
View File
@@ -99,52 +99,25 @@ static def VersionName() {
} }
dependencies { dependencies {
implementation(libs.media3.ui)
// minSdk17 implementation(libs.failureaccess)
def media3_version = "1.2.1" implementation(libs.guava)
implementation(libs.media3.common)
implementation "androidx.media3:media3-ui:$media3_version" implementation(libs.media3.exoplayer)
implementation(libs.media3.exoplayer.hls)
// For media playback using ExoPlayer implementation(libs.protobuf.kotlin)
implementation ("com.google.guava:guava:31.1-android") implementation(libs.gson)
implementation ("androidx.media3:media3-common:$media3_version") { implementation(libs.converter.gson)
exclude group: 'com.google.common', module: 'guava' implementation(libs.converter.protobuf)
} implementation(libs.retrofit)
implementation ("androidx.media3:media3-exoplayer:$media3_version") implementation(libs.glide)
implementation(libs.work.runtime.ktx)
// For HLS playback support with ExoPlayer implementation(libs.core.ktx)
implementation "androidx.media3:media3-exoplayer-hls:$media3_version" implementation(libs.multidex)
implementation(libs.leanback)
// 21:2.9.0 17:2.6.4 implementation(libs.lifecycle.runtime.ktx)
def retrofit2_version = "2.6.4" implementation(libs.constraintlayout)
implementation(libs.serialization.json)
implementation 'com.google.protobuf:protobuf-kotlin:3.25.1' implementation(libs.coroutines.android)
// Gson 2.10.1 and older: API level 19 implementation(libs.javax.annotation.api)
implementation("com.google.code.gson:gson:2.10.1")
implementation("com.squareup.retrofit2:converter-gson:$retrofit2_version") {
exclude group: 'com.google.code.gson', module: 'gson'
}
implementation "com.squareup.retrofit2:converter-protobuf:$retrofit2_version"
implementation "com.squareup.retrofit2:retrofit:$retrofit2_version"
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation("androidx.work:work-runtime-ktx:2.9.0")
implementation 'androidx.core:core-ktx:1.11.0-beta02'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.leanback:leanback:1.2.0-alpha02'
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2"
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2"
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0-RC")
implementation 'javax.annotation:javax.annotation-api:1.3.2'
}
configurations.configureEach {
resolutionStrategy {
force 'com.google.code.gson:gson:2.10.1'
force 'com.google.guava:guava:31.1-android'
}
} }
+7 -1
View File
@@ -18,4 +18,10 @@
# If you keep the line number information, uncomment this to # If you keep the line number information, uncomment this to
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile
-keep class com.google.gson.** { *; }
-dontwarn com.google.gson.**
-keep class com.google.guava.** { *; }
-dontwarn com.google.guava.**
Binary file not shown.
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
#ifndef AES_H
#define AES_H
#include <stddef.h>
void init();
void encode(const char *in, size_t size, char *out);
#endif
@@ -3,13 +3,37 @@ package com.lizongying.mytv
import android.app.AlertDialog import android.app.AlertDialog
import android.app.Dialog import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import com.lizongying.mytv.databinding.ConfirmationBinding
class ConfirmationFragment( class ConfirmationFragment(
private val listener: ConfirmationListener, private val listener: ConfirmationListener,
private val message: String, private val message: String,
private val update: Boolean private val update: Boolean
) : DialogFragment() { ) : DialogFragment() {
//
// private var _binding: ConfirmationBinding? = null
// private val binding get() = _binding!!
//
// override fun onCreateView(
// inflater: LayoutInflater, container: ViewGroup?,
// savedInstanceState: Bundle?
// ): View {
// _binding = ConfirmationBinding.inflate(inflater, container, false)
// return binding.root
// }
//
// fun updateProgress(progress: Int) {
// binding.progressBar.progress = progress
// }
//
// override fun onDestroyView() {
// super.onDestroyView()
// _binding = null
// }
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let { return activity?.let {
@@ -5,7 +5,10 @@ import android.content.Context
import android.content.res.Resources import android.content.res.Resources
import android.util.DisplayMetrics import android.util.DisplayMetrics
import android.view.WindowManager import android.view.WindowManager
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStore
import androidx.multidex.MultiDex import androidx.multidex.MultiDex
import com.lizongying.mytv.models.MyViewModel
class MyTVApplication : Application() { class MyTVApplication : Application() {
@@ -23,6 +26,8 @@ class MyTVApplication : Application() {
private var density = 2.0f private var density = 2.0f
private var scale = 1.0f private var scale = 1.0f
lateinit var myViewModel: MyViewModel
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
@@ -60,6 +65,11 @@ class MyTVApplication : Application() {
deviation = width - Resources.getSystem().displayMetrics.widthPixels deviation = width - Resources.getSystem().displayMetrics.widthPixels
scale = Resources.getSystem().displayMetrics.scaledDensity scale = Resources.getSystem().displayMetrics.scaledDensity
myViewModel = ViewModelProvider(
ViewModelStore(),
ViewModelProvider.NewInstanceFactory()
)[MyViewModel::class.java]
} }
fun getDisplayMetrics(): DisplayMetrics { fun getDisplayMetrics(): DisplayMetrics {
@@ -93,6 +93,7 @@ class PlayerFragment : Fragment() {
playerView?.player?.run { playerView?.player?.run {
setMediaItem(MediaItem.fromUri(tvViewModel.getVideoUrlCurrent())) setMediaItem(MediaItem.fromUri(tvViewModel.getVideoUrlCurrent()))
prepare() prepare()
volume = tvViewModel.getTV().volume
} }
} }
@@ -6,11 +6,14 @@ import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.View.GONE
import android.view.View.VISIBLE
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import android.widget.Toast import android.widget.Toast
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.core.view.marginEnd import androidx.core.view.marginEnd
import androidx.core.view.marginTop import androidx.core.view.marginTop
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
@@ -159,6 +162,21 @@ class SettingFragment : DialogFragment() {
requireActivity().finishAffinity() requireActivity().finishAffinity()
} }
// val myViewModel = application.myViewModel
// application.myViewModel.downloadProgress.observe(viewLifecycleOwner) { _ ->
// val downloadProgress = myViewModel.downloadProgress.value
// if (downloadProgress != null) {
// if (downloadProgress == 100) {
// binding.progressBar.visibility = GONE
// } else {
// if (!binding.progressBar.isVisible) {
// binding.progressBar.visibility = VISIBLE
// }
// binding.progressBar.progress = downloadProgress
// }
// }
// }
updateManager = UpdateManager(context, context.appVersionCode) updateManager = UpdateManager(context, context.appVersionCode)
return binding.root return binding.root
@@ -31,7 +31,7 @@ class UpdateManager(
release = releaseRequest.getRelease() release = releaseRequest.getRelease()
val code = release?.version_code val code = release?.version_code
if (code != null) { if (code != null) {
if (code.toLong() > versionCode) { if (code.toLong() >= versionCode) {
text = "最新版本:${release?.version_name}" text = "最新版本:${release?.version_name}"
update = true update = true
} else { } else {
@@ -13,6 +13,7 @@ import androidx.core.app.NotificationCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.work.CoroutineWorker import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import com.lizongying.mytv.models.MyViewModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
@@ -22,6 +23,8 @@ class UpdateWorker(context: Context, params: WorkerParameters) : CoroutineWorker
private lateinit var notificationManager: NotificationManager private lateinit var notificationManager: NotificationManager
private lateinit var notificationBuilder: NotificationCompat.Builder private lateinit var notificationBuilder: NotificationCompat.Builder
private lateinit var myViewModel: MyViewModel
override suspend fun doWork(): Result { override suspend fun doWork(): Result {
val downloadUrl = inputData.getString("DOWNLOAD_URL") ?: return Result.failure() val downloadUrl = inputData.getString("DOWNLOAD_URL") ?: return Result.failure()
val apkFileName = inputData.getString("APK_FILENAME") ?: return Result.failure() val apkFileName = inputData.getString("APK_FILENAME") ?: return Result.failure()
@@ -29,6 +32,9 @@ class UpdateWorker(context: Context, params: WorkerParameters) : CoroutineWorker
showNotification(applicationContext) showNotification(applicationContext)
val app = applicationContext as MyTVApplication
myViewModel = app.myViewModel
return withContext(Dispatchers.IO) { return withContext(Dispatchers.IO) {
try { try {
downloadAndInstall(applicationContext, downloadUrl, apkFileName, versionName) downloadAndInstall(applicationContext, downloadUrl, apkFileName, versionName)
@@ -96,6 +102,8 @@ class UpdateWorker(context: Context, params: WorkerParameters) : CoroutineWorker
if (bytesTotal > 0) { if (bytesTotal > 0) {
val progress = (bytesDownloaded * 100L / bytesTotal).toInt() val progress = (bytesDownloaded * 100L / bytesTotal).toInt()
Log.i(TAG, "progress $progress")
// myViewModel.setDownloadProgress(progress)
notificationBuilder.setProgress(100, progress, false) notificationBuilder.setProgress(100, progress, false)
notificationManager.notify(1, notificationBuilder.build()) notificationManager.notify(1, notificationBuilder.build())
} }
@@ -12,6 +12,8 @@ import okhttp3.TlsVersion
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.converter.protobuf.ProtoConverterFactory import retrofit2.converter.protobuf.ProtoConverterFactory
import java.net.InetSocketAddress
import java.net.Proxy
import javax.net.ssl.SSLContext import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager import javax.net.ssl.X509TrustManager
@@ -166,7 +168,7 @@ class ApiClient {
val sslContext = SSLContext.getInstance("SSL") val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustAllCerts, java.security.SecureRandom()) sslContext.init(null, trustAllCerts, java.security.SecureRandom())
// val proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("10.0.2.2", 8888)) val proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("10.0.2.2", 8888))
val builder = OkHttpClient.Builder() val builder = OkHttpClient.Builder()
.sslSocketFactory(sslContext.socketFactory, trustAllCerts[0] as X509TrustManager) .sslSocketFactory(sslContext.socketFactory, trustAllCerts[0] as X509TrustManager)
@@ -7,6 +7,8 @@ class Encryptor {
external fun encrypt(t: String, e: String, r: String, n: String, i: String): String external fun encrypt(t: String, e: String, r: String, n: String, i: String): String
external fun encrypt2(t: String): String
external fun hash(data: ByteArray): ByteArray? external fun hash(data: ByteArray): ByteArray?
external fun hash2(data: ByteArray): ByteArray? external fun hash2(data: ByteArray): ByteArray?
@@ -1,6 +1,7 @@
package com.lizongying.mytv.api package com.lizongying.mytv.api
import android.content.Context import android.content.Context
import android.util.Log
import com.lizongying.mytv.SP import com.lizongying.mytv.SP
import com.lizongying.mytv.Utils.getDateTimestamp import com.lizongying.mytv.Utils.getDateTimestamp
import com.lizongying.mytv.models.TVViewModel import com.lizongying.mytv.models.TVViewModel
@@ -57,6 +58,7 @@ object YSP {
var yspsdkinput = "" var yspsdkinput = ""
var openapi_signature = "" var openapi_signature = ""
var yspticket = ""
var nseqId = 1 var nseqId = 1
var nrequest_id = "" var nrequest_id = ""
@@ -85,6 +87,8 @@ object YSP {
encryptor.encrypt(cnlid, timeStr, appVer, guid, platform) encryptor.encrypt(cnlid, timeStr, appVer, guid, platform)
randStr = getRand() randStr = getRand()
signature = getSignature() signature = getSignature()
yspticket = encryptor.encrypt2("$livepid&$timeStr&$guid&519748109").lowercase()
return """{"cnlid":"$cnlid","livepid":"$livepid","stream":"$stream","guid":"$guid","cKey":"$cKey","adjust":$adjust,"sphttps":"$sphttps","platform":"$platform","cmd":"$cmd","encryptVer":"$encryptVer","dtype":"$dtype","devid":"$devid","otype":"$otype","appVer":"$appVer","app_version":"$appVersion","rand_str":"$randStr","channel":"$channel","defn":"$defn","signature":"$signature"}""" return """{"cnlid":"$cnlid","livepid":"$livepid","stream":"$stream","guid":"$guid","cKey":"$cKey","adjust":$adjust,"sphttps":"$sphttps","platform":"$platform","cmd":"$cmd","encryptVer":"$encryptVer","dtype":"$dtype","devid":"$devid","otype":"$otype","appVer":"$appVer","app_version":"$appVersion","rand_str":"$randStr","channel":"$channel","defn":"$defn","signature":"$signature"}"""
} }
@@ -22,6 +22,7 @@ interface YSPApiService {
@Header("Yspplayertoken") token: String, @Header("Yspplayertoken") token: String,
@Header("Yspsdkinput") Yspsdkinput: String, @Header("Yspsdkinput") Yspsdkinput: String,
@Header("yspsdksign") yspsdksign: String, @Header("yspsdksign") yspsdksign: String,
@Header("Yspticket") Yspticket: String,
@Header("Seqid") Seqid: String, @Header("Seqid") Seqid: String,
@Header("Request-Id") RequestId: String, @Header("Request-Id") RequestId: String,
@Header("Yspappid") Yspappid: String="519748109", @Header("Yspappid") Yspappid: String="519748109",
@@ -0,0 +1,19 @@
package com.lizongying.mytv.models
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MyViewModel : ViewModel() {
private var _downloadProgress = MutableLiveData<Int>()
val downloadProgress: LiveData<Int>
get() = _downloadProgress
fun setDownloadProgress(progress: Int) {
_downloadProgress.value = progress
}
init {
_downloadProgress.value = 0
}
}
@@ -15,6 +15,7 @@ data class TV(
var programType: ProgramType, var programType: ProgramType,
var needToken: Boolean = false, var needToken: Boolean = false,
var mustToken: Boolean = false, var mustToken: Boolean = false,
var volume: Float = 0.1F,
) : Serializable { ) : Serializable {
override fun toString(): String { override fun toString(): String {
@@ -21,7 +21,8 @@ object TVList {
"2022576801", "2022576801",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -34,7 +35,8 @@ object TVList {
"2022576701", "2022576701",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -47,7 +49,8 @@ object TVList {
"2022576501", "2022576501",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = true mustToken = true,
0.5F
), ),
TV( TV(
0, 0,
@@ -60,7 +63,8 @@ object TVList {
"2022576601", "2022576601",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -73,7 +77,8 @@ object TVList {
"2022576401", "2022576401",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -86,7 +91,8 @@ object TVList {
"2013693901", "2013693901",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = true mustToken = true,
0.5F
), ),
TV( TV(
0, 0,
@@ -99,7 +105,8 @@ object TVList {
"2022576201", "2022576201",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -112,7 +119,8 @@ object TVList {
"2022576101", "2022576101",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = true mustToken = true,
0.5F
), ),
TV( TV(
0, 0,
@@ -125,7 +133,8 @@ object TVList {
"2022576001", "2022576001",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -138,7 +147,8 @@ object TVList {
"2022573001", "2022573001",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -151,7 +161,8 @@ object TVList {
"2022575901", "2022575901",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -164,7 +175,8 @@ object TVList {
"2022575801", "2022575801",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -177,7 +189,8 @@ object TVList {
"2022575701", "2022575701",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -190,7 +203,8 @@ object TVList {
"2022575601", "2022575601",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -203,7 +217,8 @@ object TVList {
"2022575501", "2022575501",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -216,7 +231,8 @@ object TVList {
"2022575401", "2022575401",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -229,7 +245,8 @@ object TVList {
"2022575301", "2022575301",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -242,7 +259,8 @@ object TVList {
"2022576301", "2022576301",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -255,7 +273,8 @@ object TVList {
"2022575201", "2022575201",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -268,7 +287,8 @@ object TVList {
"2020603421", "2020603421",
ProgramType.Y_JCE, ProgramType.Y_JCE,
false, false,
mustToken = false mustToken = false,
0.8F
), ),
TV( TV(
0, 0,
@@ -738,7 +758,8 @@ object TVList {
"2019927403", "2019927403",
ProgramType.Y_JCE, ProgramType.Y_JCE,
true, true,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -751,7 +772,8 @@ object TVList {
"2022606701", "2022606701",
ProgramType.Y_JCE, ProgramType.Y_JCE,
true, true,
mustToken = false mustToken = false,
0.8F
), ),
TV( TV(
0, 0,
@@ -764,7 +786,8 @@ object TVList {
"2022823801", "2022823801",
ProgramType.Y_JCE, ProgramType.Y_JCE,
true, true,
mustToken = false mustToken = false,
0.6F
), ),
), ),
"港澳台" to listOf( "港澳台" to listOf(
@@ -779,7 +802,8 @@ object TVList {
"", "",
ProgramType.F, ProgramType.F,
false, false,
mustToken = false mustToken = false,
0.7F
), ),
TV( TV(
0, 0,
@@ -792,7 +816,8 @@ object TVList {
"", "",
ProgramType.F, ProgramType.F,
false, false,
mustToken = false mustToken = false,
0.7F
), ),
TV( TV(
0, 0,
@@ -805,7 +830,8 @@ object TVList {
"", "",
ProgramType.F, ProgramType.F,
false, false,
mustToken = false mustToken = false,
0.7F
), ),
), ),
"国际" to listOf( "国际" to listOf(
@@ -820,7 +846,8 @@ object TVList {
"2022575001", "2022575001",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -833,7 +860,8 @@ object TVList {
"2022574901", "2022574901",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -846,7 +874,8 @@ object TVList {
"2022574801", "2022574801",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -859,7 +888,8 @@ object TVList {
"2022574601", "2022574601",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -872,7 +902,8 @@ object TVList {
"2022571701", "2022571701",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
TV( TV(
0, 0,
@@ -885,7 +916,8 @@ object TVList {
"2022574701", "2022574701",
ProgramType.Y_PROTO, ProgramType.Y_PROTO,
false, false,
mustToken = false mustToken = false,
0.5F
), ),
) )
) )
@@ -316,10 +316,11 @@ object Request {
val request = LiveInfoRequest(data) val request = LiveInfoRequest(data)
call = request.let { call = request.let {
yspApiService.getLiveInfo( yspApiService.getLiveInfo(
"guid=${YSP.getGuid()}; gr_user_id=261eecf2-0ce4-4316-a6a1-7171e3de7389; $cookie; newLogin=1; nseqId=${YSP.nseqId}; nrequest-id=${YSP.nrequest_id}", "guid=${YSP.getGuid()}; gr_user_id=1; $cookie; newLogin=1; nseqId=${YSP.nseqId}; nrequest-id=${YSP.nrequest_id}",
YSP.token, YSP.token,
YSP.yspsdkinput, YSP.yspsdkinput,
YSP.openapi_signature, YSP.openapi_signature,
YSP.yspticket,
"${YSP.nseqId}", "${YSP.nseqId}",
YSP.nrequest_id, YSP.nrequest_id,
"519748109", "519748109",
+24
View File
@@ -0,0 +1,24 @@
<!-- res/layout/fragment_progress_dialog.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:padding="20dp">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start_update"
tools:text="开始更新">
</Button>
<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:max="100"
android:progress="0"
android:progressDrawable="@android:drawable/progress_horizontal" />
</LinearLayout>
+1
View File
@@ -11,6 +11,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="center" android:layout_gravity="center"
app:shutter_background_color="@android:color/transparent"
app:resize_mode="fill" app:resize_mode="fill"
app:use_controller="false" /> app:use_controller="false" />
</FrameLayout> </FrameLayout>
+9
View File
@@ -59,6 +59,15 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>
<!-- <androidx.core.widget.ContentLoadingProgressBar-->
<!-- android:id="@+id/progressBar"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:indeterminate="false"-->
<!-- android:max="100"-->
<!-- android:progress="0"-->
<!-- android:visibility="gone"-->
<!-- android:progressDrawable="@android:drawable/progress_horizontal" />-->
<Button <Button
android:id="@+id/clear" android:id="@+id/clear"
android:layout_width="wrap_content" android:layout_width="wrap_content"
+1
View File
@@ -8,4 +8,5 @@
<string name="title_time">显示时间</string> <string name="title_time">显示时间</string>
<string name="clear">恢复默认</string> <string name="clear">恢复默认</string>
<string name="exit">退出应用</string> <string name="exit">退出应用</string>
<string name="start_update">开始更新</string>
</resources> </resources>
+40
View File
@@ -0,0 +1,40 @@
[versions]
media3 = "1.2.1" # minSdk17
gson = "2.10.1" # 2.10.1 and older: API level 19
failureaccess = "1.0.2"
guava = "33.2.1-android"
retrofit = "2.6.4" # 21:2.9.0 17:2.6.4
protobuf = "3.25.1"
glide = "4.11.0"
work = "2.9.0"
core_ktx = "1.11.0-beta02"
multidex = "2.0.1"
leanback = "1.2.0-alpha02"
lifecycle = "2.6.2"
constraintlayout = "2.1.4"
serialization = "1.6.2"
coroutines = "1.8.0-RC"
javax_annotation = "1.3.2"
[libraries]
media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3" }
media3-common = { module = "androidx.media3:media3-common", version.ref = "media3" }
media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" }
media3-exoplayer-hls = { module = "androidx.media3:media3-exoplayer-hls", version.ref = "media3" }
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }
failureaccess = { module = "com.google.guava:failureaccess", version.ref = "failureaccess" }
guava = { module = "com.google.guava:guava", version.ref = "guava" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
converter-protobuf = { module = "com.squareup.retrofit2:converter-protobuf", version.ref = "retrofit" }
protobuf-kotlin = { module = "com.google.protobuf:protobuf-kotlin", version.ref = "protobuf" }
glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" }
work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "work" }
core-ktx = { module = "androidx.core:core-ktx", version.ref = "core_ktx" }
multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" }
leanback = { module = "androidx.leanback:leanback", version.ref = "leanback" }
lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" }
constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" }
serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization" }
coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
javax-annotation-api = { module = "javax.annotation:javax.annotation-api", version.ref = "javax_annotation" }
+1 -1
View File
@@ -1 +1 @@
{"version_code": 33619968, "version_name": "v2.1.0"} {"version_code": 33620992, "version_name": "v2.1.4"}