Skip to content

Commit 604874c

Browse files
committed
support qrcode
1 parent 9ccdfee commit 604874c

23 files changed

+399
-529
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414
.externalNativeBuild
1515
.cxx
1616
local.properties
17+
files

HISTORY.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
## 更新日志
22

3+
### v1.1.7
4+
5+
* 可以通过二维码访问配置地址
6+
* 支持自定义请求头
7+
* 在线升级优化
8+
* 增加恢复默认
9+
* 增加dash支持
10+
311
### v1.1.6
412

513
* 默认频道超出频道列表范围,自动设置为0

Makefile

+3
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ gen-version:
99
#make gen v=v1.1.3
1010
gen:
1111
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
12+
13+
channels:
14+
gua64 -f -e files/channels.json -o app/src/main/res/raw/channels.txt

README.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@
4242
"title": "标题",
4343
"uris": [
4444
"视频地址"
45-
]
45+
],
46+
"headers": {
47+
"user-agent": ""
48+
}
4649
}
4750
]
4851
```

app/build.gradle.kts

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ android {
1111

1212
defaultConfig {
1313
applicationId = "com.lizongying.mytv0"
14-
minSdk = 23
14+
minSdk = 21
1515
targetSdk = 34
1616
versionCode = getVersionCode()
1717
versionName = getVersionName()
@@ -71,9 +71,8 @@ dependencies {
7171
// For media playback using ExoPlayer
7272
implementation("androidx.media3:media3-exoplayer:$media3Version")
7373

74-
// For HLS playback support with ExoPlayer
7574
implementation("androidx.media3:media3-exoplayer-hls:$media3Version")
76-
75+
implementation("androidx.media3:media3-exoplayer-dash:$media3Version")
7776
implementation("androidx.media3:media3-exoplayer-rtsp:$media3Version")
7877

7978
implementation("androidx.core:core-ktx:1.12.0")
@@ -100,4 +99,6 @@ dependencies {
10099
implementation("io.github.lizongying:gua64:1.4.3")
101100

102101
implementation("org.nanohttpd:nanohttpd:2.3.1")
102+
103+
implementation("com.google.zxing:core:3.5.3")
103104
}

app/src/main/java/com/lizongying/mytv0/ChannelFragment.kt

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class ChannelFragment : Fragment() {
3737
binding.channel.layoutParams = layoutParams
3838

3939
binding.content.textSize = application.px2PxFont(binding.content.textSize)
40+
binding.time.textSize = application.px2PxFont(binding.time.textSize)
4041

4142
binding.main.layoutParams.width = application.shouldWidthPx()
4243
binding.main.layoutParams.height = application.shouldHeightPx()

app/src/main/java/com/lizongying/mytv0/MainActivity.kt

+31-99
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.view.MotionEvent
1313
import android.view.View
1414
import android.view.WindowManager
1515
import android.widget.Toast
16+
import androidx.fragment.app.Fragment
1617
import androidx.fragment.app.FragmentActivity
1718
import com.lizongying.mytv0.models.TVList
1819

@@ -135,15 +136,14 @@ class MainActivity : FragmentActivity() {
135136
&& tvModel.tv.id == TVList.position.value
136137
) {
137138
Log.i(TAG, "errInfo ${tvModel.tv.title} ${tvModel.errInfo.value}")
139+
hideFragment(loadingFragment)
138140
if (tvModel.errInfo.value == "") {
139141
Log.i(TAG, "hideErrorFragment ${tvModel.errInfo.value.toString()}")
140142
hideErrorFragment()
141-
hideLoadingFragment()
142-
showPlayerFragment()
143+
showFragment(playerFragment)
143144
} else {
144145
Log.i(TAG, "showErrorFragment ${tvModel.errInfo.value.toString()}")
145-
hidePlayerFragment()
146-
hideLoadingFragment()
146+
hideFragment(playerFragment)
147147
showErrorFragment(tvModel.errInfo.value.toString())
148148
}
149149
}
@@ -157,7 +157,7 @@ class MainActivity : FragmentActivity() {
157157
) {
158158
Log.i(TAG, "loading ${tvModel.tv.title}")
159159
hideErrorFragment()
160-
showLoadingFragment()
160+
showFragment(loadingFragment)
161161
playerFragment.play(tvModel)
162162
infoFragment.show(tvModel)
163163
if (SP.channelNum) {
@@ -181,8 +181,7 @@ class MainActivity : FragmentActivity() {
181181
private val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
182182

183183
override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
184-
Log.i(TAG, "onSingleTapConfirmed showMenu")
185-
showMenu()
184+
showFragment(menuFragment)
186185
return true
187186
}
188187

@@ -302,6 +301,26 @@ class MainActivity : FragmentActivity() {
302301
TVList.setPosition(position)
303302
}
304303

304+
private fun showFragment(fragment: Fragment) {
305+
if (!fragment.isHidden) {
306+
return
307+
}
308+
309+
supportFragmentManager.beginTransaction()
310+
.show(fragment)
311+
.commitNow()
312+
}
313+
314+
private fun hideFragment(fragment: Fragment) {
315+
if (fragment.isHidden) {
316+
return
317+
}
318+
319+
supportFragmentManager.beginTransaction()
320+
.hide(fragment)
321+
.commitNow()
322+
}
323+
305324
fun menuActive() {
306325
handler.removeCallbacks(hideMenu)
307326
handler.postDelayed(hideMenu, delayHideMenu)
@@ -329,9 +348,9 @@ class MainActivity : FragmentActivity() {
329348

330349
fun showTime() {
331350
if (SP.time) {
332-
showTimeFragment()
351+
showFragment(timeFragment)
333352
} else {
334-
hideTimeFragment()
353+
hideFragment(timeFragment)
335354
}
336355
}
337356

@@ -395,32 +414,6 @@ class MainActivity : FragmentActivity() {
395414
}, 2000)
396415
}
397416

398-
fun switchMainFragment() {
399-
val transaction = supportFragmentManager.beginTransaction()
400-
401-
if (menuFragment.isHidden) {
402-
// menuFragment.setPosition()
403-
transaction.show(menuFragment)
404-
menuActive()
405-
} else {
406-
transaction.hide(menuFragment)
407-
}
408-
409-
transaction.commit()
410-
}
411-
412-
413-
private fun showMenu() {
414-
if (!settingFragment.isHidden) {
415-
return
416-
}
417-
418-
supportFragmentManager.beginTransaction()
419-
.show(menuFragment)
420-
.commit()
421-
menuActive()
422-
}
423-
424417
private fun showSetting() {
425418
if (!menuFragment.isHidden) {
426419
return
@@ -468,66 +461,6 @@ class MainActivity : FragmentActivity() {
468461
.commitNow()
469462
}
470463

471-
private fun showLoadingFragment() {
472-
if (!loadingFragment.isHidden) {
473-
return
474-
}
475-
476-
supportFragmentManager.beginTransaction()
477-
.show(loadingFragment)
478-
.commitNow()
479-
}
480-
481-
private fun hideLoadingFragment() {
482-
if (loadingFragment.isHidden) {
483-
return
484-
}
485-
486-
supportFragmentManager.beginTransaction()
487-
.hide(loadingFragment)
488-
.commitNow()
489-
}
490-
491-
private fun showTimeFragment() {
492-
if (!timeFragment.isHidden) {
493-
return
494-
}
495-
496-
supportFragmentManager.beginTransaction()
497-
.show(timeFragment)
498-
.commitNow()
499-
}
500-
501-
private fun hideTimeFragment() {
502-
if (timeFragment.isHidden) {
503-
return
504-
}
505-
506-
supportFragmentManager.beginTransaction()
507-
.hide(timeFragment)
508-
.commitNow()
509-
}
510-
511-
private fun showPlayerFragment() {
512-
if (!playerFragment.isHidden) {
513-
return
514-
}
515-
516-
supportFragmentManager.beginTransaction()
517-
.show(playerFragment)
518-
.commit()
519-
}
520-
521-
private fun hidePlayerFragment() {
522-
if (playerFragment.isHidden) {
523-
return
524-
}
525-
526-
supportFragmentManager.beginTransaction()
527-
.hide(playerFragment)
528-
.commit()
529-
}
530-
531464
fun onKey(keyCode: Int): Boolean {
532465
Log.d(TAG, "keyCode $keyCode")
533466
when (keyCode) {
@@ -617,11 +550,11 @@ class MainActivity : FragmentActivity() {
617550
}
618551

619552
KeyEvent.KEYCODE_ENTER -> {
620-
switchMainFragment()
553+
showFragment(menuFragment)
621554
}
622555

623556
KeyEvent.KEYCODE_DPAD_CENTER -> {
624-
switchMainFragment()
557+
showFragment(menuFragment)
625558
}
626559

627560
KeyEvent.KEYCODE_DPAD_UP -> {
@@ -641,8 +574,7 @@ class MainActivity : FragmentActivity() {
641574
}
642575

643576
KeyEvent.KEYCODE_DPAD_LEFT -> {
644-
showMenu()
645-
// return true
577+
showFragment(menuFragment)
646578
}
647579

648580
KeyEvent.KEYCODE_DPAD_RIGHT -> {

app/src/main/java/com/lizongying/mytv0/MenuFragment.kt

+9-2
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,22 @@ class MenuFragment : Fragment(), GroupAdapter.ItemListener, ListAdapter.ItemList
159159
// groupAdapter.focusable(false)
160160
// listAdapter.focusable(true)
161161
// }
162-
Log.i(TAG, "list on show toPosition ${listAdapter.tvListModel.position.value!!}/${listAdapter.tvListModel.size()}")
162+
Log.i(
163+
TAG,
164+
"list on show toPosition ${listAdapter.tvListModel.position.value!!}/${listAdapter.tvListModel.size()}"
165+
)
163166
listAdapter.toPosition(listAdapter.tvListModel.position.value!!)
164167
}
165168
if (binding.group.isVisible) {
166169
// groupAdapter.focusable(true)
167170
// listAdapter.focusable(false)
168-
Log.i(TAG, "group on show toPosition ${TVList.groupModel.position.value!!}/${TVList.groupModel.size()}")
171+
Log.i(
172+
TAG,
173+
"group on show toPosition ${TVList.groupModel.position.value!!}/${TVList.groupModel.size()}"
174+
)
169175
groupAdapter.toPosition(TVList.groupModel.position.value!!)
170176
}
177+
(activity as MainActivity).menuActive()
171178
} else {
172179
view?.post {
173180
groupAdapter.visiable = false

app/src/main/java/com/lizongying/mytv0/AppreciateModalFragment.kt app/src/main/java/com/lizongying/mytv0/ModalFragment.kt

+16-11
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.lizongying.mytv0
22

3+
import android.graphics.Bitmap
34
import android.os.Bundle
45
import android.os.Handler
56
import android.os.Looper
6-
import android.util.Log
77
import android.view.LayoutInflater
88
import android.view.View
99
import android.view.ViewGroup
@@ -12,7 +12,8 @@ import androidx.fragment.app.DialogFragment
1212
import com.bumptech.glide.Glide
1313
import com.lizongying.mytv0.databinding.AppreciateBinding
1414

15-
class AppreciateModalFragment : DialogFragment() {
15+
16+
class ModalFragment : DialogFragment() {
1617

1718
private var _binding: AppreciateBinding? = null
1819
private val binding get() = _binding!!
@@ -39,15 +40,18 @@ class AppreciateModalFragment : DialogFragment() {
3940

4041
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4142
super.onViewCreated(view, savedInstanceState)
42-
Log.i(TAG, "onViewCreated")
4343

44-
// Get the drawable ID from the arguments
45-
val drawableId = arguments?.getInt(KEY)
44+
val bitmap: Bitmap? = arguments?.getParcelable(KEY_BITMAP)
4645

47-
// Load the drawable into the ImageView
48-
Glide.with(requireContext())
49-
.load(drawableId)
50-
.into(binding.modalImage)
46+
if (bitmap != null) {
47+
Glide.with(requireContext())
48+
.load(bitmap)
49+
.into(binding.modalImage)
50+
} else {
51+
Glide.with(requireContext())
52+
.load(arguments?.getInt(KEY_DRAWABLE_ID))
53+
.into(binding.modalImage)
54+
}
5155

5256
handler.postDelayed(hideAppreciateModal, delayHideAppreciateModal)
5357
}
@@ -65,7 +69,8 @@ class AppreciateModalFragment : DialogFragment() {
6569
}
6670

6771
companion object {
68-
const val KEY = "drawable_id"
69-
const val TAG = "AppreciateModalFragment"
72+
const val KEY_DRAWABLE_ID = "drawable_id"
73+
const val KEY_BITMAP = "bitmap"
74+
const val TAG = "ModalFragment"
7075
}
7176
}

app/src/main/java/com/lizongying/mytv0/PlayerFragment.kt

+6-5
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,13 @@ class PlayerFragment : Fragment(), SurfaceHolder.Callback {
186186
}
187187
})
188188

189-
// val hlsMediaSource = HlsMediaSource.Factory(httpDataSource).createMediaSource(
190-
// MediaItem.fromUri(videoUrl)
191-
// )
192-
// setMediaSource(hlsMediaSource)
189+
val dataSource = tvModel.buildSource()
190+
if (dataSource != null) {
191+
setMediaSource(dataSource)
192+
} else {
193+
setMediaItem(MediaItem.fromUri(videoUrl))
194+
}
193195

194-
setMediaItem(MediaItem.fromUri(videoUrl))
195196
prepare()
196197
}
197198
exoPlayer?.run {

0 commit comments

Comments
 (0)