diff --git a/HISTORY.md b/HISTORY.md index d23305a9..0d630e8d 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,134 +1,140 @@ ## 更新日志 +### v1.2.6 + +* 解決切換頻道時黑屏問題 +* 解決部分配置地址請求失敗的問題 +* 支持配置代理 + ### v1.2.5 -* 配置地址兼容处理 -* 部分手机设备样式兼容处理 -* 遥控器左键不再退出频道列表 -* 解决视频源文件分组不连续的问题 -* 应用启动后进入我的收藏的功能暂不可用 +* 配置地址兼容處理 +* 部分手機設備樣式兼容處理 +* 遙控器左鍵不再退出頻道列表 +* 解決視頻源文件分組不連續的問題 +* 應用啟動後進入我的收藏的功能暫不可用 ### v1.2.3 -* 修复一些无法播放的问题 +* 修復一些無法播放的問題 ### v1.2.2 -* 修复一些无法播放的问题 -* 优化频道列表样式 +* 修復一些無法播放的問題 +* 優化頻道列表樣式 ### v1.2.1 -* 修复样式 +* 修復樣式 ### v1.2.0 -* 修复部分设备网络地址获取错误的问题 -* 恢复默认的时候会清除收藏 -* 修复一些崩溃问题 -* 手机支持收藏功能 +* 修復部分設備網絡地址獲取錯誤的問題 +* 恢復默認的時候會清除收藏 +* 修復一些崩潰問題 +* 手機支持收藏功能 ### v1.1.9 -* 菜单打开时,不能打开频道列表 -* 频道号大于1000以上时兼容样式 +* 菜單打開時,不能打開頻道列表 +* 頻道號大於1000以上時兼容樣式 * 增加收藏功能 ### v1.1.8 -* 频道列表优化 +* 頻道列表優化 ### v1.1.7 -* 可以通过二维码访问配置地址 -* 支持自定义请求头 -* 在线升级优化 -* 增加恢复默认 +* 可以通過二維碼訪問配置地址 +* 支持自定義請求頭 +* 在線升級優化 +* 增加恢復默認 * 增加dash支持 ### v1.1.6 -* 默认频道超出频道列表范围,自动设置为0 -* 通过网络配置的频道会自动保存 -* 可以通过网络配置视频源地址 -* 视频源可以配置为本地文件 +* 默認頻道超出頻道列表範圍,自動設置為0 +* 通過網絡配置的頻道會自動保存 +* 可以通過網絡配置視頻源地址 +* 視頻源可以配置為本地文件 ### v1.1.5 -* 可以指定默认频道 -* 内置服务器,局域网内可配置 +* 可以指定默認頻道 +* 內置服務器,局域網內可配置 ### v1.1.4 -* 默认使用上次缓存视频源 -* 样式优化 +* 默認使用上次緩存視頻源 +* 樣式優化 ### v1.1.3 -* 修复m3u解析错误 +* 修復m3u解析錯誤 ### v1.1.2 * 保存配置地址 -* 启动后自动更新配置 -* 样式优化 +* 啟動後自動更新配置 +* 樣式優化 ### v1.1.1 -* 优化频道号选台 -* 如果没有图标,显示频道号 +* 優化頻道號選台 +* 如果沒有圖標,顯示頻道號 ### v1.1.0 -* 优化频道数字显示 -* 增加时间显示 -* 增加时间显示配置 +* 優化頻道數字顯示 +* 增加時間顯示 +* 增加時間顯示配置 ### v1.0.9 -* 减小频道数字文字大小 -* 播放时背景颜色为黑色 +* 減小頻道數字文字大小 +* 播放時背景顏色為黑色 ### v1.0.8 -* 点击节目列表/菜单以外区域,自动隐藏节目列表/菜单 -* 解决部分情况下崩溃问题 +* 點擊節目列表/菜單以外區域,自動隱藏節目列表/菜單 +* 解決部分情況下崩潰問題 ### v1.0.7 * 支持rtsp直播 -* 支持循环播放 -* 支持txt/m3u视频源 +* 支持循環播放 +* 支持txt/m3u視頻源 ### v1.0.6 -* 修复视频可能无声音的问题 -* 修复视频可能无法播放的问题 +* 修復視頻可能無聲音的問題 +* 修復視頻可能無法播放的問題 ### v1.0.5 -* 修复频道配置错误时可能崩溃的问题 -* 修复更新频道配置时可能不生效的问题 -* 修复图标为空时可能崩溃的问题 +* 修復頻道配置錯誤時可能崩潰的問題 +* 修復更新頻道配置時可能不生效的問題 +* 修復圖標為空時可能崩潰的問題 ### v1.0.4 -* 在触屏设备上双击打开节目列表 -* 支持自动更新 +* 在觸屏設備上雙擊打開節目列表 +* 支持自動更新 ### v1.0.3 -* 保存上次频道 +* 保存上次頻道 ### v1.0.2 -* 改变部分样式 +* 改變部分樣式 ### v1.0.1 -* 支持返回键退出 -* 支持基本的视频源配置 +* 支持返回鍵退出 +* 支持基本的視頻源配置 ### v1.0.0 -* 基本视频播放 \ No newline at end of file +* 基本視頻播放 \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv0/InfoFragment.kt b/app/src/main/java/com/lizongying/mytv0/InfoFragment.kt index 04f18a94..072ffd34 100644 --- a/app/src/main/java/com/lizongying/mytv0/InfoFragment.kt +++ b/app/src/main/java/com/lizongying/mytv0/InfoFragment.kt @@ -68,6 +68,7 @@ class InfoFragment : Fragment() { } fun show(tvViewModel: TVModel) { + val context = requireContext() binding.title.text = tvViewModel.tv.title when (tvViewModel.tv.title) { @@ -78,18 +79,22 @@ class InfoFragment : Fragment() { val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) + val text = "${tvViewModel.tv.id + 1}" + var size = 100f + if (tvViewModel.tv.id > 999) { + size = 90f + } val paint = Paint().apply { - color = ContextCompat.getColor(context!!, R.color.blur) - textSize = 100f + color = ContextCompat.getColor(context, R.color.blur) + textSize = size textAlign = Paint.Align.CENTER } - val text = "${tvViewModel.tv.id + 1}" val x = width / 2f val y = height / 2f - (paint.descent() + paint.ascent()) / 2 canvas.drawText(text, x, y, paint) Glide.with(this) - .load(BitmapDrawable(context?.resources, bitmap)) + .load(BitmapDrawable(context.resources, bitmap)) // .centerInside() .into(binding.logo) } else { diff --git a/app/src/main/java/com/lizongying/mytv0/MainActivity.kt b/app/src/main/java/com/lizongying/mytv0/MainActivity.kt index d21b86a5..aa9b0037 100644 --- a/app/src/main/java/com/lizongying/mytv0/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv0/MainActivity.kt @@ -239,6 +239,10 @@ class MainActivity : FragmentActivity() { return true } + override fun onLongPress(e: MotionEvent) { + Log.i(TAG, "onLongPress") + } + override fun onFling( e1: MotionEvent?, e2: MotionEvent, diff --git a/app/src/main/java/com/lizongying/mytv0/MyTVApplication.kt b/app/src/main/java/com/lizongying/mytv0/MyTVApplication.kt index 338b6665..2167c349 100644 --- a/app/src/main/java/com/lizongying/mytv0/MyTVApplication.kt +++ b/app/src/main/java/com/lizongying/mytv0/MyTVApplication.kt @@ -1,6 +1,5 @@ package com.lizongying.mytv0 -import android.app.Application import android.content.Context import android.content.res.Resources import android.os.Handler diff --git a/app/src/main/java/com/lizongying/mytv0/PlayerFragment.kt b/app/src/main/java/com/lizongying/mytv0/PlayerFragment.kt index fa920bba..fae41b41 100644 --- a/app/src/main/java/com/lizongying/mytv0/PlayerFragment.kt +++ b/app/src/main/java/com/lizongying/mytv0/PlayerFragment.kt @@ -23,7 +23,6 @@ import androidx.media3.datasource.DefaultHttpDataSource import androidx.media3.datasource.TransferListener import androidx.media3.exoplayer.DefaultRenderersFactory import androidx.media3.exoplayer.ExoPlayer -import androidx.media3.exoplayer.hls.HlsMediaSource import androidx.media3.exoplayer.mediacodec.MediaCodecSelector import androidx.media3.exoplayer.mediacodec.MediaCodecUtil import com.google.android.exoplayer2.Player.DISCONTINUITY_REASON_PERIOD_TRANSITION @@ -34,6 +33,7 @@ import com.lizongying.mytv0.models.TVModel class PlayerFragment : Fragment(), SurfaceHolder.Callback { private var _binding: PlayerBinding? = null + private val binding get() = _binding!! private var player: ExoPlayer? = null private var exoPlayer: SimpleExoPlayer? = null diff --git a/app/src/main/java/com/lizongying/mytv0/SP.kt b/app/src/main/java/com/lizongying/mytv0/SP.kt index a06b8af3..fbdedb04 100644 --- a/app/src/main/java/com/lizongying/mytv0/SP.kt +++ b/app/src/main/java/com/lizongying/mytv0/SP.kt @@ -35,6 +35,8 @@ object SP { private const val KEY_LIKE = "like" + private const val KEY_PROXY = "proxy" + private lateinit var sp: SharedPreferences /** @@ -114,4 +116,8 @@ object SP { fun deleteLike() { sp.edit().remove(KEY_LIKE).apply() } + + var proxy: String? + get() = sp.getString(KEY_PROXY, "") + set(value) = sp.edit().putString(KEY_PROXY, value).apply() } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv0/SettingFragment.kt b/app/src/main/java/com/lizongying/mytv0/SettingFragment.kt index cd941ad7..9ac93bd2 100644 --- a/app/src/main/java/com/lizongying/mytv0/SettingFragment.kt +++ b/app/src/main/java/com/lizongying/mytv0/SettingFragment.kt @@ -152,6 +152,27 @@ class SettingFragment : Fragment() { (activity as MainActivity).settingActive() } + val defaultProxy = binding.proxy + defaultProxy.text = + SP.proxy.let { Editable.Factory.getInstance().newEditable(it) } + ?: Editable.Factory.getInstance().newEditable("") + binding.confirmProxy.setOnClickListener { + val c = defaultProxy.text.toString().trim() + var proxy = "" + try { + proxy = Uri.parse(c).toString() + } catch (e: Exception) { + println(e) + } + if (proxy != "") { + SP.proxy = proxy + "代理配置成功".showToast(Toast.LENGTH_LONG) + } else { + defaultProxy.error = "无效的代理" + } + (activity as MainActivity).settingActive() + } + binding.clear.setOnClickListener { SP.config = "" config.text = Editable.Factory.getInstance().newEditable("") @@ -200,92 +221,75 @@ class SettingFragment : Fragment() { layoutParamsVersion.topMargin = application.px2Px(binding.version.marginTop) binding.version.layoutParams = layoutParamsVersion - binding.qrcode.layoutParams.width = - application.px2Px(binding.qrcode.layoutParams.width) - binding.qrcode.layoutParams.height = - application.px2Px(binding.qrcode.layoutParams.height) - binding.qrcode.textSize = application.px2PxFont(binding.qrcode.textSize) - val layoutParamsQrcode = - binding.qrcode.layoutParams as ViewGroup.MarginLayoutParams - layoutParamsQrcode.marginEnd = application.px2Px(binding.qrcode.marginEnd) - binding.qrcode.layoutParams = layoutParamsQrcode - - binding.server.textSize = application.px2PxFont(binding.server.textSize) - - binding.checkVersion.layoutParams.width = - application.px2Px(binding.checkVersion.layoutParams.width) - binding.checkVersion.layoutParams.height = - application.px2Px(binding.checkVersion.layoutParams.height) - binding.checkVersion.textSize = application.px2PxFont(binding.checkVersion.textSize) - val layoutParamsCheckVersion = - binding.checkVersion.layoutParams as ViewGroup.MarginLayoutParams - layoutParamsCheckVersion.marginEnd = application.px2Px(binding.checkVersion.marginEnd) - binding.checkVersion.layoutParams = layoutParamsCheckVersion - - binding.versionName.textSize = application.px2PxFont(binding.versionName.textSize) - - binding.confirmConfig.layoutParams.width = + val btnWidth = application.px2Px(binding.confirmConfig.layoutParams.width) - binding.confirmConfig.layoutParams.height = + val btnHeight = application.px2Px(binding.confirmConfig.layoutParams.height) - binding.confirmConfig.textSize = application.px2PxFont(binding.confirmConfig.textSize) - val layoutParamsConfirmConfig = + val btnTextSize = + application.px2PxFont(binding.confirmConfig.textSize) + val btnLayoutParams = binding.confirmConfig.layoutParams as ViewGroup.MarginLayoutParams - layoutParamsConfirmConfig.marginEnd = application.px2Px(binding.confirmConfig.marginEnd) - binding.confirmConfig.layoutParams = layoutParamsConfirmConfig + btnLayoutParams.marginEnd = application.px2Px(binding.confirmConfig.marginEnd) - binding.config.layoutParams.width = + val txtWidth = application.px2Px(binding.config.layoutParams.width) - binding.config.textSize = application.px2PxFont(binding.config.textSize) - - binding.confirmChannel.layoutParams.width = - application.px2Px(binding.confirmChannel.layoutParams.width) - binding.confirmChannel.layoutParams.height = - application.px2Px(binding.confirmChannel.layoutParams.height) - binding.confirmChannel.textSize = - application.px2PxFont(binding.confirmChannel.textSize) - val layoutParamsConfirmDefaultChannel = - binding.confirmChannel.layoutParams as ViewGroup.MarginLayoutParams - layoutParamsConfirmDefaultChannel.marginEnd = - application.px2Px(binding.confirmChannel.marginEnd) - binding.confirmChannel.layoutParams = layoutParamsConfirmDefaultChannel - - binding.channel.layoutParams.width = - application.px2Px(binding.channel.layoutParams.width) - binding.channel.textSize = application.px2PxFont(binding.channel.textSize) - - binding.clear.layoutParams.width = - application.px2Px(binding.clear.layoutParams.width) - binding.clear.layoutParams.height = - application.px2Px(binding.clear.layoutParams.height) - binding.clear.textSize = application.px2PxFont(binding.clear.textSize) - val layoutParamsPermission = - binding.clear.layoutParams as ViewGroup.MarginLayoutParams - layoutParamsPermission.topMargin = - application.px2Px(binding.clear.marginTop) - binding.clear.layoutParams = layoutParamsPermission - - binding.appreciate.layoutParams.width = - application.px2Px(binding.appreciate.layoutParams.width) - binding.appreciate.layoutParams.height = - application.px2Px(binding.appreciate.layoutParams.height) - binding.appreciate.textSize = application.px2PxFont(binding.appreciate.textSize) - val layoutParamsAppreciate = - binding.appreciate.layoutParams as ViewGroup.MarginLayoutParams - layoutParamsAppreciate.topMargin = - application.px2Px(binding.appreciate.marginTop) - binding.appreciate.layoutParams = layoutParamsAppreciate - - binding.exit.layoutParams.width = - application.px2Px(binding.exit.layoutParams.width) - binding.exit.layoutParams.height = - application.px2Px(binding.exit.layoutParams.height) - binding.exit.textSize = application.px2PxFont(binding.exit.textSize) - val layoutParamsExit = - binding.exit.layoutParams as ViewGroup.MarginLayoutParams - layoutParamsExit.topMargin = - application.px2Px(binding.exit.marginTop) - binding.exit.layoutParams = layoutParamsExit + val txtTextSize = + application.px2PxFont(binding.config.textSize) + + binding.checkVersion.layoutParams.width = btnWidth + binding.checkVersion.layoutParams.height = btnHeight + binding.checkVersion.textSize = btnTextSize + binding.checkVersion.layoutParams = btnLayoutParams + + binding.versionName.layoutParams.width = txtWidth + binding.versionName.textSize = txtTextSize + + binding.qrcode.layoutParams.width = btnWidth + binding.qrcode.layoutParams.height = btnHeight + binding.qrcode.textSize = btnTextSize + binding.qrcode.layoutParams = btnLayoutParams + + binding.server.layoutParams.width = txtWidth + binding.server.textSize = txtTextSize + + binding.confirmConfig.layoutParams.width = btnWidth + binding.confirmConfig.layoutParams.height = btnHeight + binding.confirmConfig.textSize = btnTextSize + binding.confirmConfig.layoutParams = btnLayoutParams + + binding.config.layoutParams.width = txtWidth + binding.config.textSize = txtTextSize + + binding.confirmChannel.layoutParams.width = btnWidth + binding.confirmChannel.layoutParams.height = btnHeight + binding.confirmChannel.textSize = btnTextSize + binding.confirmChannel.layoutParams = btnLayoutParams + + binding.channel.layoutParams.width = txtWidth + binding.channel.textSize = txtTextSize + + binding.confirmProxy.layoutParams.width = btnWidth + binding.confirmProxy.layoutParams.height = btnHeight + binding.confirmProxy.textSize = btnTextSize + binding.confirmProxy.layoutParams = btnLayoutParams + + binding.proxy.layoutParams.width = txtWidth + binding.proxy.textSize = txtTextSize + + binding.clear.layoutParams.width = btnWidth + binding.clear.layoutParams.height = btnHeight + binding.clear.textSize = btnTextSize + binding.clear.layoutParams = btnLayoutParams + + binding.appreciate.layoutParams.width = btnWidth + binding.appreciate.layoutParams.height = btnHeight + binding.appreciate.textSize = btnTextSize + binding.appreciate.layoutParams = btnLayoutParams + + binding.exit.layoutParams.width = btnWidth + binding.exit.layoutParams.height = btnHeight + binding.exit.textSize = btnTextSize + binding.exit.layoutParams = btnLayoutParams val textSize = application.px2PxFont(binding.switchChannelReversal.textSize) diff --git a/app/src/main/java/com/lizongying/mytv0/UpdateManager.kt b/app/src/main/java/com/lizongying/mytv0/UpdateManager.kt index 212f34d9..6d58e3ee 100644 --- a/app/src/main/java/com/lizongying/mytv0/UpdateManager.kt +++ b/app/src/main/java/com/lizongying/mytv0/UpdateManager.kt @@ -14,7 +14,7 @@ import android.os.Handler import android.os.Looper import android.util.Log import androidx.fragment.app.FragmentActivity -import com.lizongying.mytv0.requests.ApiClient +import com.lizongying.mytv0.requests.HttpClient import com.lizongying.mytv0.requests.ReleaseRequest import com.lizongying.mytv0.requests.ReleaseResponse import kotlinx.coroutines.CoroutineScope @@ -68,10 +68,10 @@ class UpdateManager( val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager val request = - Request(Uri.parse("${ApiClient.DOWNLOAD_HOST}${release.version_name}/$apkName-${release.version_name}.apk")) + Request(Uri.parse("${HttpClient.DOWNLOAD_HOST}${release.version_name}/$apkName-${release.version_name}.apk")) Log.i( TAG, - "url ${Uri.parse("${ApiClient.DOWNLOAD_HOST}${release.version_name}/$apkName-${release.version_name}.apk")}" + "url ${Uri.parse("${HttpClient.DOWNLOAD_HOST}${release.version_name}/$apkName-${release.version_name}.apk")}" ) context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)?.mkdirs() Log.i(TAG, "save dir ${Environment.DIRECTORY_DOWNLOADS}") diff --git a/app/src/main/java/com/lizongying/mytv0/models/TVList.kt b/app/src/main/java/com/lizongying/mytv0/models/TVList.kt index 66fea513..12b364c8 100644 --- a/app/src/main/java/com/lizongying/mytv0/models/TVList.kt +++ b/app/src/main/java/com/lizongying/mytv0/models/TVList.kt @@ -10,6 +10,7 @@ import androidx.lifecycle.MutableLiveData import com.google.gson.JsonSyntaxException import com.lizongying.mytv0.R import com.lizongying.mytv0.SP +import com.lizongying.mytv0.requests.HttpClient import com.lizongying.mytv0.showToast import io.github.lizongying.Gua import kotlinx.coroutines.CoroutineScope @@ -67,9 +68,8 @@ object TVList { CoroutineScope(Dispatchers.IO).launch { try { Log.i(TAG, "request $serverUrl") - val client = okhttp3.OkHttpClient() val request = okhttp3.Request.Builder().url(serverUrl).build() - val response = client.newCall(request).execute() + val response = HttpClient.okHttpClient.newCall(request).execute() if (response.isSuccessful) { val file = File(appDirectory, FILE_NAME) diff --git a/app/src/main/java/com/lizongying/mytv0/requests/ConfigService.kt b/app/src/main/java/com/lizongying/mytv0/requests/ConfigService.kt new file mode 100644 index 00000000..db0cc61f --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv0/requests/ConfigService.kt @@ -0,0 +1,10 @@ +package com.lizongying.mytv0.requests + +import retrofit2.Call +import retrofit2.http.Url + +interface ConfigService { + fun getConfig( + @Url url: String + ): Call +} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv0/requests/DnsCache.kt b/app/src/main/java/com/lizongying/mytv0/requests/DnsCache.kt index e0b9e0f7..b1728e11 100644 --- a/app/src/main/java/com/lizongying/mytv0/requests/DnsCache.kt +++ b/app/src/main/java/com/lizongying/mytv0/requests/DnsCache.kt @@ -1,23 +1,39 @@ package com.lizongying.mytv0.requests +import android.text.TextUtils import okhttp3.Dns +import java.net.Inet4Address import java.net.InetAddress import java.util.concurrent.ConcurrentHashMap + class DnsCache : Dns { private val dnsCache: MutableMap> = ConcurrentHashMap() override fun lookup(hostname: String): List { + if (TextUtils.isEmpty(hostname)) { + return Dns.SYSTEM.lookup(hostname); + } + dnsCache[hostname]?.let { return it } + val addressesNew: MutableList = ArrayList() + val addresses = InetAddress.getAllByName(hostname).toList() + for (address in addresses) { + if (address is Inet4Address) { + addressesNew.add(0, address); + } else { + addressesNew.add(address); + } + } - if (addresses.isNotEmpty()) { - dnsCache[hostname] = addresses + if (addressesNew.isNotEmpty()) { + dnsCache[hostname] = addressesNew } - return addresses + return addressesNew } } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv0/requests/ApiClient.kt b/app/src/main/java/com/lizongying/mytv0/requests/HttpClient.kt similarity index 77% rename from app/src/main/java/com/lizongying/mytv0/requests/ApiClient.kt rename to app/src/main/java/com/lizongying/mytv0/requests/HttpClient.kt index 239783f0..f694e1ea 100644 --- a/app/src/main/java/com/lizongying/mytv0/requests/ApiClient.kt +++ b/app/src/main/java/com/lizongying/mytv0/requests/HttpClient.kt @@ -1,20 +1,30 @@ package com.lizongying.mytv0.requests +import android.net.Uri import android.os.Build import android.util.Log +import com.lizongying.mytv0.SP import okhttp3.ConnectionSpec import okhttp3.OkHttpClient import okhttp3.TlsVersion import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory +import java.net.InetSocketAddress +import java.net.Proxy import javax.net.ssl.SSLContext import javax.net.ssl.TrustManager import javax.net.ssl.X509TrustManager -class ApiClient { - private var okHttpClient = getUnsafeOkHttpClient() +object HttpClient { + const val TAG = "HttpClient" + private const val HOST = "https://gitee.com/lizongying/my-tv-0/raw/" + const val DOWNLOAD_HOST = "https://gitee.com/lizongying/my-tv-0/releases/download/" + + val okHttpClient: OkHttpClient by lazy { + getUnsafeOkHttpClient() + } val releaseService: ReleaseService by lazy { Retrofit.Builder() @@ -24,6 +34,12 @@ class ApiClient { .build().create(ReleaseService::class.java) } + val configService: ConfigService by lazy { + Retrofit.Builder() + .client(okHttpClient) + .build().create(ConfigService::class.java) + } + private fun enableTls12OnPreLollipop(client: OkHttpClient.Builder): OkHttpClient.Builder { if (Build.VERSION.SDK_INT >= 16 && Build.VERSION.SDK_INT < 22) { try { @@ -82,17 +98,20 @@ class ApiClient { val builder = OkHttpClient.Builder() .sslSocketFactory(sslContext.socketFactory, trustAllCerts[0] as X509TrustManager) .hostnameVerifier { _, _ -> true } + .connectionSpecs(listOf(ConnectionSpec.COMPATIBLE_TLS, ConnectionSpec.CLEARTEXT)) .dns(DnsCache()) + if (SP.proxy != "") { + Log.i(TAG, "proxy ${SP.proxy}") + val uri = Uri.parse(SP.proxy) + val proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress(uri.host, uri.port)) + builder.proxy(proxy) + } + return enableTls12OnPreLollipop(builder).build() } catch (e: Exception) { throw RuntimeException(e) } } - - companion object { - const val HOST = "https://gitee.com/lizongying/my-tv-0/raw/" - const val DOWNLOAD_HOST = "https://gitee.com/lizongying/my-tv-0/releases/download/" - } } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv0/requests/ReleaseRequest.kt b/app/src/main/java/com/lizongying/mytv0/requests/ReleaseRequest.kt index 3bcc8ff1..7353adaa 100644 --- a/app/src/main/java/com/lizongying/mytv0/requests/ReleaseRequest.kt +++ b/app/src/main/java/com/lizongying/mytv0/requests/ReleaseRequest.kt @@ -9,7 +9,6 @@ import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine class ReleaseRequest { - private var releaseService = ApiClient().releaseService suspend fun getRelease(): ReleaseResponse? { return withContext(Dispatchers.IO) { @@ -19,7 +18,7 @@ class ReleaseRequest { private suspend fun fetchRelease(): ReleaseResponse? { return suspendCoroutine { continuation -> - releaseService.getRelease() + HttpClient.releaseService.getRelease() .enqueue(object : Callback { override fun onResponse( call: Call, diff --git a/app/src/main/res/layout/group_item.xml b/app/src/main/res/layout/group_item.xml index f7b3be14..0551aa03 100644 --- a/app/src/main/res/layout/group_item.xml +++ b/app/src/main/res/layout/group_item.xml @@ -16,5 +16,7 @@ android:textColor="#B3EEEEEE" android:color="#FF263238" android:layout_marginVertical="5dp" + android:maxLines="1" + android:ellipsize="end" android:textSize="20sp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml index 5e66aed2..8360f51b 100644 --- a/app/src/main/res/layout/list_item.xml +++ b/app/src/main/res/layout/list_item.xml @@ -25,8 +25,8 @@ app:layout_constraintBottom_toBottomOf="parent" android:layout_marginStart="5dp" android:textColor="#FFEEEEEE" - android:maxLines="1" tools:text="CCTV1" + android:maxLines="1" android:ellipsize="end" android:textSize="16sp" /> diff --git a/app/src/main/res/layout/loading.xml b/app/src/main/res/layout/loading.xml index a0c362bf..0be57c46 100644 --- a/app/src/main/res/layout/loading.xml +++ b/app/src/main/res/layout/loading.xml @@ -3,7 +3,7 @@ android:id="@+id/loading" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/black" + android:background="@android:color/transparent" > - @@ -20,6 +22,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" + android:keepScreenOn="true" + app:shutter_background_color="@android:color/transparent" app:resize_mode="fill" app:use_controller="false" /> \ No newline at end of file diff --git a/app/src/main/res/layout/setting.xml b/app/src/main/res/layout/setting.xml index aa5c0279..7df11884 100644 --- a/app/src/main/res/layout/setting.xml +++ b/app/src/main/res/layout/setting.xml @@ -123,6 +123,27 @@ android:scrollbars="vertical" android:inputType="textMultiLine" /> + +