Skip to content

Commit

Permalink
error page
Browse files Browse the repository at this point in the history
  • Loading branch information
lizongying committed Apr 26, 2024
1 parent fe92fa5 commit 5aa08f5
Show file tree
Hide file tree
Showing 26 changed files with 339 additions and 107 deletions.
6 changes: 6 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
## 更新日志

### v1.8.6(通用)

* 增加错误显示
* 节目预告优化
* 频道列表页单击切换频道

### v1.8.4(通用)

* 解決部分情況下打開後黑屏问题
Expand Down
28 changes: 12 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@

## 使用

下载安装:
[github](https://github.com/lizongying/my-tv/releases/)
[gitee](https://gitee.com/lizongying/my-tv/releases/)

小米电视可以使用小米电视助手进行安装

如电视可以启用ADB,也可以通过ADB进行安装:

```shell
adb install my-tv.apk
```
1. 下载
* [github](https://github.com/lizongying/my-tv/releases/)
* [gitee](https://gitee.com/lizongying/my-tv/releases/)
2. 安裝
* U盘安装
* 小米电视可以使用小米电视助手进行安装
* 如电视可以启用ADB,也可以通过ADB进行安装
```shell
adb install my-tv.apk
```

![image](./screenshots/img_3.png)
![image](./screenshots/img_2.png)
Expand All @@ -32,14 +31,11 @@ adb install my-tv.apk
* 地方频道
* 收藏夹
* 海外
* 1.5.0 无法安装,1.5.1 可以安装
* 节目增加预告
* epg更新后菜单更新
* 隐藏频道
* 亮度调节
* 音量调节
* 错误页
* 频道列表页只点击一次即可
* 軟解
* 自動更新

## 版权说明

Expand Down
Binary file modified app/src/main/cpp/arm64-v8a/libnative.so
Binary file not shown.
Binary file modified app/src/main/cpp/armeabi-v7a/libnative.so
Binary file not shown.
70 changes: 65 additions & 5 deletions app/src/main/java/com/lizongying/mytv/CardAdapter.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.lizongying.mytv

import android.util.Log
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewConfiguration
import android.view.ViewGroup
import android.view.animation.ScaleAnimation
import androidx.core.view.marginTop
Expand All @@ -12,6 +15,7 @@ import com.bumptech.glide.Glide
import com.lizongying.mytv.databinding.CardBinding
import com.lizongying.mytv.models.TVListViewModel
import com.lizongying.mytv.models.TVViewModel
import kotlin.math.abs


class CardAdapter(
Expand Down Expand Up @@ -45,6 +49,7 @@ class CardAdapter(
binding.desc.layoutParams = layoutParams

val cardView = binding.root
cardView.isClickable = true
cardView.isFocusable = true
cardView.isFocusableInTouchMode = true
return ViewHolder(cardView, binding)
Expand All @@ -55,14 +60,14 @@ class CardAdapter(
recyclerView.invalidate()
}

private fun startScaleAnimation(view: View, fromScale: Float, toScale: Float, duration: Long) {
private fun startScaleAnimation(view: View) {
val scaleAnimation = ScaleAnimation(
fromScale, toScale,
fromScale, toScale,
0.9f, 1.0f,
0.9f, 1.0f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f
)
scaleAnimation.duration = duration
scaleAnimation.duration = 200
scaleAnimation.fillAfter = false
view.startAnimation(scaleAnimation)
}
Expand All @@ -80,7 +85,7 @@ class CardAdapter(
focused = cardView

if (focusable) {
startScaleAnimation(cardView, 0.9f, 1.0f, 200)
startScaleAnimation(cardView)
viewHolder.focus(true)
}
} else {
Expand All @@ -94,6 +99,34 @@ class CardAdapter(
listener?.onItemClicked(item)
}

var downX = 0f
var downY = 0f
val touchSlop = ViewConfiguration.get(cardView.context).scaledTouchSlop

cardView.setOnTouchListener { _, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
downX = event.x
downY = event.y
true
}

MotionEvent.ACTION_UP -> {
val upX = event.x
val upY = event.y
val deltaX = abs(upX - downX)
val deltaY = abs(upY - downY)
if (deltaX < touchSlop && deltaY < touchSlop) {
// 如果位移量小于阈值,则执行点击操作
cardView.performClick()
}
true
}

else -> false
}
}

cardView.setOnKeyListener { _, keyCode, event: KeyEvent? ->
if (event?.action == KeyEvent.ACTION_DOWN) {
return@setOnKeyListener listener?.onKey(keyCode) ?: false
Expand Down Expand Up @@ -132,6 +165,33 @@ class CardAdapter(
}
}

fun updateEPG() {
for (i in 0 until recyclerView.childCount) {
val childView = recyclerView.getChildAt(i)

val viewHolder = recyclerView.getChildViewHolder(childView) as ViewHolder

if (viewHolder.view.tag != null && viewHolder.view.tag is TVViewModel) {
val tvViewModel = viewHolder.view.tag as TVViewModel

val epg = tvViewModel.epg.value?.filter { it.beginTime < Utils.getDateTimestamp() }

if (!epg.isNullOrEmpty()) {
val title = epg.last().title
if (viewHolder.binding.desc.text != title) {
viewHolder.binding.desc.text = title
Log.i(TAG, "updateEPG $title")
}
} else {
if (viewHolder.binding.desc.text != "") {
viewHolder.binding.desc.text = ""
Log.i(TAG, "updateEPG")
}
}
}
}
}

fun toPosition(position: Int) {
recyclerView.post {
recyclerView.scrollToPosition(position)
Expand Down
53 changes: 53 additions & 0 deletions app/src/main/java/com/lizongying/mytv/ErrorFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.lizongying.mytv

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.marginLeft
import androidx.core.view.marginTop
import androidx.fragment.app.Fragment
import com.lizongying.mytv.databinding.ErrorBinding

class ErrorFragment : Fragment() {
private var _binding: ErrorBinding? = null
private val binding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = ErrorBinding.inflate(inflater, container, false)

val application = requireActivity().applicationContext as MyTvApplication

binding.logo.layoutParams.width = application.px2Px(binding.logo.layoutParams.width)
binding.logo.layoutParams.height = application.px2Px(binding.logo.layoutParams.height)

val layoutParamsMain = binding.main.layoutParams as ViewGroup.MarginLayoutParams
layoutParamsMain.leftMargin = application.px2Px(binding.main.marginLeft)
binding.main.layoutParams = layoutParamsMain

val layoutParams = binding.msg.layoutParams as ViewGroup.MarginLayoutParams
layoutParams.topMargin = application.px2Px(binding.msg.marginTop)
binding.msg.layoutParams = layoutParams

binding.msg.textSize = application.px2PxFont(binding.msg.textSize)

(activity as MainActivity).fragmentReady(TAG)
return binding.root
}

fun show(msg: String) {
binding.msg.text = msg
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

companion object {
private const val TAG = "ErrorFragment"
}
}
2 changes: 2 additions & 0 deletions app/src/main/java/com/lizongying/mytv/InfoFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,15 @@ class InfoFragment : Fragment() {
binding.logo.setPadding(application.px2Px(binding.logo.paddingTop))
binding.main.layoutParams.width = application.px2Px(binding.main.layoutParams.width)
binding.main.setPadding(application.px2Px(binding.main.paddingTop))

val layoutParamsMain = binding.main.layoutParams as ViewGroup.MarginLayoutParams
layoutParamsMain.leftMargin = application.px2Px(binding.main.marginLeft)
binding.main.layoutParams = layoutParamsMain

val layoutParamsDesc = binding.desc.layoutParams as ViewGroup.MarginLayoutParams
layoutParamsDesc.topMargin = application.px2Px(binding.desc.marginTop)
binding.desc.layoutParams = layoutParamsDesc

binding.title.textSize = application.px2PxFont(binding.title.textSize)
binding.desc.textSize = application.px2PxFont(binding.desc.textSize)

Expand Down
45 changes: 43 additions & 2 deletions app/src/main/java/com/lizongying/mytv/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import android.widget.Toast
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope
import com.lizongying.mytv.models.TVViewModel
import com.lizongying.mytv.requests.Request
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
Expand All @@ -27,6 +28,7 @@ class MainActivity : FragmentActivity(), Request.RequestListener {

private var ready = 0
private val playerFragment = PlayerFragment()
private val errorFragment = ErrorFragment()
private val mainFragment = MainFragment()
private val infoFragment = InfoFragment()
private val channelFragment = ChannelFragment()
Expand All @@ -53,7 +55,6 @@ class MainActivity : FragmentActivity(), Request.RequestListener {
}

override fun onCreate(savedInstanceState: Bundle?) {
Log.i(TAG, "onCreate")
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)
Expand All @@ -67,11 +68,13 @@ class MainActivity : FragmentActivity(), Request.RequestListener {
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.add(R.id.main_browse_fragment, playerFragment)
.add(R.id.main_browse_fragment, errorFragment)
.add(R.id.main_browse_fragment, timeFragment)
.add(R.id.main_browse_fragment, infoFragment)
.add(R.id.main_browse_fragment, channelFragment)
.add(R.id.main_browse_fragment, mainFragment)
.hide(mainFragment)
.hide(errorFragment)
.commit()
}
gestureDetector = GestureDetector(this, GestureListener())
Expand Down Expand Up @@ -103,6 +106,44 @@ class MainActivity : FragmentActivity(), Request.RequestListener {
}
}

fun showErrorFragment(msg: String) {
errorFragment.show(msg)
if (errorFragment.isVisible) {
return
}
supportFragmentManager.beginTransaction()
.show(errorFragment)
.commit()
}

fun hideErrorFragment() {
errorFragment.show("")
if (!errorFragment.isVisible) {
return
}
supportFragmentManager.beginTransaction()
.hide(errorFragment)
.commit()
}

fun showPlayerFragment() {
if (playerFragment.isVisible) {
return
}
supportFragmentManager.beginTransaction()
.show(playerFragment)
.commit()
}

fun hidePlayerFragment() {
if (!playerFragment.isVisible) {
return
}
supportFragmentManager.beginTransaction()
.hide(playerFragment)
.commit()
}

private fun showChannel(channel: String) {
if (!mainFragment.isHidden) {
return
Expand Down Expand Up @@ -183,7 +224,7 @@ class MainActivity : FragmentActivity(), Request.RequestListener {
fun fragmentReady(tag: String) {
ready++
Log.i(TAG, "ready $tag $ready ")
if (ready == 7) {
if (ready == 8) {
mainFragment.fragmentReady()
showTime()
}
Expand Down

0 comments on commit 5aa08f5

Please sign in to comment.