Skip to content

Commit

Permalink
support local file
Browse files Browse the repository at this point in the history
  • Loading branch information
lizongying committed May 8, 2024
1 parent 1a99863 commit 9ccdfee
Show file tree
Hide file tree
Showing 21 changed files with 542 additions and 211 deletions.
88 changes: 88 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
## 更新日志

### v1.1.6

* 默认频道超出频道列表范围,自动设置为0
* 通过网络配置的频道会自动保存
* 可以通过网络配置视频源地址
* 视频源可以配置为本地文件

### v1.1.5

* 可以指定默认频道
* 内置服务器,局域网内可配置

### v1.1.4

* 默认使用上次缓存视频源
* 样式优化

### v1.1.3

* 修复m3u解析错误

### v1.1.2

* 保存配置地址
* 启动后自动更新配置
* 样式优化

### v1.1.1

* 优化频道号选台
* 如果没有图标,显示频道号

### v1.1.0

* 优化频道数字显示
* 增加时间显示
* 增加时间显示配置

### v1.0.9

* 减小频道数字文字大小
* 播放时背景颜色为黑色

### v1.0.8

* 点击节目列表/菜单以外区域,自动隐藏节目列表/菜单
* 解决部分情况下崩溃问题

### v1.0.7

* 支持rtsp直播
* 支持循环播放
* 支持txt/m3u视频源

### v1.0.6

* 修复视频可能无声音的问题
* 修复视频可能无法播放的问题

### v1.0.5

* 修复频道配置错误时可能崩溃的问题
* 修复更新频道配置时可能不生效的问题
* 修复图标为空时可能崩溃的问题

### v1.0.4

* 在触屏设备上双击打开节目列表
* 支持自动更新

### v1.0.3

* 保存上次频道

### v1.0.2

* 改变部分样式

### v1.0.1

* 支持返回键退出
* 支持基本的视频源配置

### v1.0.0

* 基本视频播放
88 changes: 9 additions & 79 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@
* 遥控器右键/触屏双击打开配置
* 遥控器返回键关闭节目列表/配置
* 打开配置页后,配置地址后并确认,更新节目列表
* 配置了视频源地址,并且打开了“启动后自动更新视频源”后,软件启动后自动更新视频源

注意:

* 视频源可以设置为本地文件,格式如:file:///mnt/sdcard/tmp/channels.m3u
/channels.m3u
* 如果设置的是本地文件,则软件重新启动后不会自动更新。需要手动确认。
* 可能需要在设置页面请求权限

目前支持的配置格式:

Expand Down Expand Up @@ -50,85 +58,7 @@
## 更新日志
### v1.1.5
* 可以指定默认频道
* 内置服务器,局域网内可配置
### v1.1.4
* 默认使用上次缓存视频源
* 样式优化
### v1.1.3
* 修复m3u解析错误
### v1.1.2
* 保存配置地址
* 启动后自动更新配置
* 样式优化
### v1.1.1
* 优化频道号选台
* 如果没有图标,显示频道号
### v1.1.0
* 优化频道数字显示
* 增加时间显示
* 增加时间显示配置
### v1.0.9
* 减小频道数字文字大小
* 播放时背景颜色为黑色
### v1.0.8
* 点击节目列表/菜单以外区域,自动隐藏节目列表/菜单
* 解决部分情况下崩溃问题
### v1.0.7
* 支持rtsp直播
* 支持循环播放
* 支持txt/m3u视频源
### v1.0.6
* 修复视频可能无声音的问题
* 修复视频可能无法播放的问题
### v1.0.5
* 修复频道配置错误时可能崩溃的问题
* 修复更新频道配置时可能不生效的问题
* 修复图标为空时可能崩溃的问题
### v1.0.4
* 在触屏设备上双击打开节目列表
* 支持自动更新
### v1.0.3
* 保存上次频道
### v1.0.2
* 改变部分样式
### v1.0.1
* 支持返回键退出
* 支持基本的视频源配置
### v1.0.0
* 基本视频播放
[更新日志](./HISTORY.md)
## 其他
Expand Down
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,5 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
</manifest>
40 changes: 25 additions & 15 deletions app/src/main/java/com/lizongying/mytv0/ConfirmationFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,35 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment

class ConfirmationFragment(private val listener: ConfirmationListener) :
DialogFragment() {
class ConfirmationFragment(
private val listener: ConfirmationListener,
private val message: String,
private val update: Boolean
) : DialogFragment() {

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
builder.setTitle("确认")
.setMessage("确认更新吗?")
.setPositiveButton(
"确定"
) { _, _ ->
listener.onConfirm()
}
.setNegativeButton(
"取消"
) { _, _ ->
listener.onCancel()
}
// 创建并返回 AlertDialog 对象
builder.setTitle(message)
if (update) {
builder.setMessage("确定更新吗?")
.setPositiveButton(
"确定"
) { _, _ ->
listener.onConfirm()
}
.setNegativeButton(
"取消"
) { _, _ ->
listener.onCancel()
}
} else {
builder.setMessage("")
.setNegativeButton(
"确定"
) { _, _ ->
}
}
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
Expand Down
21 changes: 16 additions & 5 deletions app/src/main/java/com/lizongying/mytv0/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class MainActivity : FragmentActivity() {

private lateinit var gestureDetector: GestureDetector

var server: SimpleServer? = null
private var server: SimpleServer? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand Down Expand Up @@ -91,19 +91,30 @@ class MainActivity : FragmentActivity() {
ok++
if (ok == 3) {
Log.i(TAG, "watch")
TVList.groupModel.tvGroupModel.observe(this) { _ ->
TVList.groupModel.change.observe(this) { _ ->
Log.i(TAG, "groupModel changed")
if (TVList.groupModel.tvGroupModel.value != null) {
watch()
Log.i(TAG, "menuFragment update")
menuFragment.update()
}
}

if (SP.channel > 0 && SP.channel < TVList.listModel.size) {
TVList.setPosition(SP.channel - 1)
if (SP.channel > 0) {
if (SP.channel < TVList.listModel.size) {
TVList.setPosition(SP.channel - 1)
"播放默认频道".showToast(Toast.LENGTH_LONG)
} else {
SP.channel = 0
TVList.setPosition(0)
"默认频道超出频道列表范围,已自动设置为0".showToast(Toast.LENGTH_LONG)
}
} else {
if (!TVList.setPosition(SP.position)) {
Log.i(TAG, "setPosition 0")
TVList.setPosition(0)
"上次频道超出频道列表范围,已自动设置为0".showToast(Toast.LENGTH_LONG)
} else {
"播放上次频道".showToast(Toast.LENGTH_LONG)
}
}
val port = PortUtil.findFreePort()
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/lizongying/mytv0/MenuFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -159,13 +159,13 @@ class MenuFragment : Fragment(), GroupAdapter.ItemListener, ListAdapter.ItemList
// groupAdapter.focusable(false)
// listAdapter.focusable(true)
// }
Log.i(TAG, "list on show toPosition ${listAdapter.tvListModel.position.value!!}")
Log.i(TAG, "list on show toPosition ${listAdapter.tvListModel.position.value!!}/${listAdapter.tvListModel.size()}")
listAdapter.toPosition(listAdapter.tvListModel.position.value!!)
}
if (binding.group.isVisible) {
// groupAdapter.focusable(true)
// listAdapter.focusable(false)
Log.i(TAG, "group on show toPosition ${TVList.groupModel.position.value!!}")
Log.i(TAG, "group on show toPosition ${TVList.groupModel.position.value!!}/${TVList.groupModel.size()}")
groupAdapter.toPosition(TVList.groupModel.position.value!!)
}
} else {
Expand Down
6 changes: 0 additions & 6 deletions app/src/main/java/com/lizongying/mytv0/MyTVApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -53,21 +53,15 @@ class MyTvApplication : Application() {
density = Resources.getSystem().displayMetrics.density
scale = displayMetrics.scaledDensity


Log.i(TAG, "width $width height $height")

if ((width.toDouble() / height) < (16.0 / 9.0)) {
ratio = width * 2 / 1920.0 / density
shouldWidth = width
shouldHeight = (width * 9.0 / 16.0).toInt()
} else {
ratio = height * 2 / 1080.0 / density
Log.i(TAG, "ratio $ratio$density")
shouldHeight = height
shouldWidth = (height * 16.0 / 9.0).toInt()
}

Log.i(TAG, "shouldWidth $shouldWidth shouldHeight $shouldHeight")
}

fun getDisplayMetrics(): DisplayMetrics {
Expand Down
Loading

0 comments on commit 9ccdfee

Please sign in to comment.