mirror of
https://github.com/lizongying/my-tv.git
synced 2026-10-26 22:26:29 +08:00
phoenix retry
This commit is contained in:
@@ -230,6 +230,7 @@ adb install my-tv.apk
|
|||||||
* 节目增加预告
|
* 节目增加预告
|
||||||
* 频道列表优化
|
* 频道列表优化
|
||||||
* epg更新后菜单更新
|
* epg更新后菜单更新
|
||||||
|
* 防止菜单第一个获取焦点
|
||||||
|
|
||||||
## 赞赏
|
## 赞赏
|
||||||
|
|
||||||
|
|||||||
@@ -17,15 +17,15 @@ import com.lizongying.mytv.models.TVViewModel
|
|||||||
|
|
||||||
class CardAdapter(
|
class CardAdapter(
|
||||||
private val recyclerView: RecyclerView,
|
private val recyclerView: RecyclerView,
|
||||||
private val owner: LifecycleOwner,
|
private val mainFragment: MainFragment,
|
||||||
private var tvListViewModel: TVListViewModel,
|
private var tvListViewModel: TVListViewModel,
|
||||||
) :
|
) :
|
||||||
RecyclerView.Adapter<CardAdapter.ViewHolder>() {
|
RecyclerView.Adapter<CardAdapter.ViewHolder>() {
|
||||||
|
|
||||||
private var listener: ItemListener? = null
|
private var listener: ItemListener? = null
|
||||||
private var focused: View? = null
|
private var focused: View? = null
|
||||||
private var defaultFocused = false
|
|
||||||
var defaultFocus: Int = -1
|
var visiable = false
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
val cardView = object :
|
val cardView = object :
|
||||||
@@ -57,19 +57,23 @@ class CardAdapter(
|
|||||||
|
|
||||||
val tvViewModel = item as TVViewModel
|
val tvViewModel = item as TVViewModel
|
||||||
val cardView = viewHolder.view as ImageCardView
|
val cardView = viewHolder.view as ImageCardView
|
||||||
|
cardView.tag = tvViewModel
|
||||||
|
|
||||||
if (!defaultFocused && item.id.value == defaultFocus) {
|
val onFocusChangeListener = View.OnFocusChangeListener { view, hasFocus ->
|
||||||
cardView.requestFocus()
|
|
||||||
defaultFocused = true
|
|
||||||
}
|
|
||||||
|
|
||||||
val onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
|
|
||||||
listener?.onItemFocusChange(item, hasFocus)
|
|
||||||
|
|
||||||
// if (hasFocus && defaultFocus == item.id.value) {
|
|
||||||
if (hasFocus) {
|
if (hasFocus) {
|
||||||
|
listener?.onItemHasFocus(item)
|
||||||
focused = cardView
|
focused = cardView
|
||||||
|
|
||||||
startScaleAnimation(cardView, 0.9f, 1.0f, 200)
|
startScaleAnimation(cardView, 0.9f, 1.0f, 200)
|
||||||
|
//
|
||||||
|
// if (mainFragment.shouldHasFocus(view.tag as TVViewModel)) {
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (visiable) {
|
||||||
|
// startScaleAnimation(cardView, 0.9f, 1.0f, 200)
|
||||||
|
// } else {
|
||||||
|
// visiable = true
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,8 +114,16 @@ class CardAdapter(
|
|||||||
val view = itemView
|
val view = itemView
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun toPosition(position: Int) {
|
||||||
|
recyclerView.post {
|
||||||
|
recyclerView.scrollToPosition(position)
|
||||||
|
recyclerView.getChildAt(position)?.isSelected
|
||||||
|
recyclerView.getChildAt(position)?.requestFocus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface ItemListener {
|
interface ItemListener {
|
||||||
fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean)
|
fun onItemHasFocus(tvViewModel: TVViewModel)
|
||||||
fun onItemClicked(tvViewModel: TVViewModel)
|
fun onItemClicked(tvViewModel: TVViewModel)
|
||||||
fun onKey(keyCode: Int): Boolean
|
fun onKey(keyCode: Int): Boolean
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
val adapter =
|
val adapter =
|
||||||
CardAdapter(
|
CardAdapter(
|
||||||
itemBinding.rowItems,
|
itemBinding.rowItems,
|
||||||
viewLifecycleOwner,
|
this,
|
||||||
tvListViewModelCurrent,
|
tvListViewModelCurrent,
|
||||||
)
|
)
|
||||||
rowList.add(itemBinding.rowItems)
|
rowList.add(itemBinding.rowItems)
|
||||||
@@ -111,14 +111,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
itemPosition = 0
|
itemPosition = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
val tv = tvListViewModel.getTVViewModel(itemPosition)
|
|
||||||
for (i in rowList) {
|
|
||||||
if (i.tag as Int == tv?.getRowPosition()) {
|
|
||||||
((i as RecyclerView).adapter as CardAdapter).defaultFocus = itemPosition
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tvListViewModel.setItemPosition(itemPosition)
|
tvListViewModel.setItemPosition(itemPosition)
|
||||||
tvListViewModel.tvListViewModel.value?.forEach { tvViewModel ->
|
tvListViewModel.tvListViewModel.value?.forEach { tvViewModel ->
|
||||||
tvViewModel.errInfo.observe(viewLifecycleOwner) { _ ->
|
tvViewModel.errInfo.observe(viewLifecycleOwner) { _ ->
|
||||||
@@ -191,20 +183,18 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean) {
|
override fun onItemHasFocus(tvViewModel: TVViewModel) {
|
||||||
if (hasFocus) {
|
tvListViewModel.setItemPositionCurrent(tvViewModel.id.value!!)
|
||||||
tvListViewModel.setItemPositionCurrent(tvViewModel.id.value!!)
|
|
||||||
|
|
||||||
val row = tvViewModel.getRowPosition()
|
val row = tvViewModel.getRowPosition()
|
||||||
|
|
||||||
for (i in rowList) {
|
for (i in rowList) {
|
||||||
if (i.tag as Int != row) {
|
if (i.tag as Int != row) {
|
||||||
((i as RecyclerView).adapter as CardAdapter).clear()
|
((i as RecyclerView).adapter as CardAdapter).clear()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
(activity as MainActivity).mainActive()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(activity as MainActivity).mainActive()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemClicked(tvViewModel: TVViewModel) {
|
override fun onItemClicked(tvViewModel: TVViewModel) {
|
||||||
@@ -237,8 +227,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
itemPosition
|
itemPosition
|
||||||
)?.requestFocus()
|
)?.requestFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
((rowList[rowPosition] as RecyclerView).adapter as CardAdapter).defaultFocus = itemPosition
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun check(tvViewModel: TVViewModel): Boolean {
|
fun check(tvViewModel: TVViewModel): Boolean {
|
||||||
@@ -304,6 +292,32 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun shouldHasFocus(tvModel: TVViewModel):Boolean {
|
||||||
|
return tvModel == tvListViewModel.getTVViewModel(itemPosition)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onHiddenChanged(hidden: Boolean) {
|
||||||
|
super.onHiddenChanged(hidden)
|
||||||
|
if (!hidden) {
|
||||||
|
val tvModel = tvListViewModel.getTVViewModel(itemPosition)
|
||||||
|
val rowPosition = tvModel?.getRowPosition()
|
||||||
|
val itemPosition = tvModel?.getItemPosition()
|
||||||
|
Log.i(TAG, "toPosition $rowPosition $itemPosition")
|
||||||
|
for (i in rowList) {
|
||||||
|
if (i.tag as Int == rowPosition) {
|
||||||
|
((i as RecyclerView).adapter as CardAdapter).toPosition(itemPosition!!)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
view?.post {
|
||||||
|
// for (i in rowList) {
|
||||||
|
// ((i as RecyclerView).adapter as CardAdapter).visiable = false
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
Log.i(TAG, "onResume")
|
Log.i(TAG, "onResume")
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|||||||
@@ -399,9 +399,9 @@ object Request {
|
|||||||
// Log.d(TAG, "$title url $url")
|
// Log.d(TAG, "$title url $url")
|
||||||
tvModel.addVideoUrl(url)
|
tvModel.addVideoUrl(url)
|
||||||
tvModel.allReady()
|
tvModel.allReady()
|
||||||
tvModel.retryTimes = 0
|
tvModel.tokenRetryTimes = 0
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "auth status error")
|
Log.e(TAG, "auth status error ${response.code()}")
|
||||||
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) {
|
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) {
|
||||||
tvModel.tokenRetryTimes++
|
tvModel.tokenRetryTimes++
|
||||||
fetchFAuth(tvModel)
|
fetchFAuth(tvModel)
|
||||||
|
|||||||
Reference in New Issue
Block a user