diff --git a/README.md b/README.md index 17f948a..5549223 100644 --- a/README.md +++ b/README.md @@ -230,6 +230,7 @@ adb install my-tv.apk * 节目增加预告 * 频道列表优化 * epg更新后菜单更新 +* 防止菜单第一个获取焦点 ## 赞赏 diff --git a/app/src/main/java/com/lizongying/mytv/CardAdapter.kt b/app/src/main/java/com/lizongying/mytv/CardAdapter.kt index 46c609b..80ca622 100644 --- a/app/src/main/java/com/lizongying/mytv/CardAdapter.kt +++ b/app/src/main/java/com/lizongying/mytv/CardAdapter.kt @@ -17,15 +17,15 @@ import com.lizongying.mytv.models.TVViewModel class CardAdapter( private val recyclerView: RecyclerView, - private val owner: LifecycleOwner, + private val mainFragment: MainFragment, private var tvListViewModel: TVListViewModel, ) : RecyclerView.Adapter() { private var listener: ItemListener? = 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 { val cardView = object : @@ -57,19 +57,23 @@ class CardAdapter( val tvViewModel = item as TVViewModel val cardView = viewHolder.view as ImageCardView + cardView.tag = tvViewModel - if (!defaultFocused && item.id.value == defaultFocus) { - cardView.requestFocus() - defaultFocused = true - } - - val onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus -> - listener?.onItemFocusChange(item, hasFocus) - -// if (hasFocus && defaultFocus == item.id.value) { + val onFocusChangeListener = View.OnFocusChangeListener { view, hasFocus -> if (hasFocus) { + listener?.onItemHasFocus(item) focused = cardView + 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 } + fun toPosition(position: Int) { + recyclerView.post { + recyclerView.scrollToPosition(position) + recyclerView.getChildAt(position)?.isSelected + recyclerView.getChildAt(position)?.requestFocus() + } + } + interface ItemListener { - fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean) + fun onItemHasFocus(tvViewModel: TVViewModel) fun onItemClicked(tvViewModel: TVViewModel) fun onKey(keyCode: Int): Boolean } diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index c84ff78..17af6ab 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -72,7 +72,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { val adapter = CardAdapter( itemBinding.rowItems, - viewLifecycleOwner, + this, tvListViewModelCurrent, ) rowList.add(itemBinding.rowItems) @@ -111,14 +111,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { 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.tvListViewModel.value?.forEach { tvViewModel -> tvViewModel.errInfo.observe(viewLifecycleOwner) { _ -> @@ -191,20 +183,18 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { return false } - override fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean) { - if (hasFocus) { - tvListViewModel.setItemPositionCurrent(tvViewModel.id.value!!) + override fun onItemHasFocus(tvViewModel: TVViewModel) { + tvListViewModel.setItemPositionCurrent(tvViewModel.id.value!!) - val row = tvViewModel.getRowPosition() + val row = tvViewModel.getRowPosition() - for (i in rowList) { - if (i.tag as Int != row) { - ((i as RecyclerView).adapter as CardAdapter).clear() - } + for (i in rowList) { + if (i.tag as Int != row) { + ((i as RecyclerView).adapter as CardAdapter).clear() } - - (activity as MainActivity).mainActive() } + + (activity as MainActivity).mainActive() } override fun onItemClicked(tvViewModel: TVViewModel) { @@ -237,8 +227,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { itemPosition )?.requestFocus() } - - ((rowList[rowPosition] as RecyclerView).adapter as CardAdapter).defaultFocus = itemPosition } 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() { Log.i(TAG, "onResume") super.onResume() diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index a7ab2eb..0c22053 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -399,9 +399,9 @@ object Request { // Log.d(TAG, "$title url $url") tvModel.addVideoUrl(url) tvModel.allReady() - tvModel.retryTimes = 0 + tvModel.tokenRetryTimes = 0 } else { - Log.e(TAG, "auth status error") + Log.e(TAG, "auth status error ${response.code()}") if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { tvModel.tokenRetryTimes++ fetchFAuth(tvModel)