mirror of
https://github.com/lizongying/my-tv.git
synced 2026-10-26 22:26:29 +08:00
fix save state
This commit is contained in:
@@ -2,6 +2,7 @@ package com.lizongying.mytv
|
|||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.view.ContextThemeWrapper
|
import android.view.ContextThemeWrapper
|
||||||
|
import android.view.KeyEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.animation.ScaleAnimation
|
import android.view.animation.ScaleAnimation
|
||||||
@@ -18,13 +19,13 @@ class CardAdapter(
|
|||||||
private val recyclerView: RecyclerView,
|
private val recyclerView: RecyclerView,
|
||||||
private val owner: LifecycleOwner,
|
private val owner: LifecycleOwner,
|
||||||
private var tvListViewModel: TVListViewModel,
|
private var tvListViewModel: TVListViewModel,
|
||||||
var defaultFocus: Int,
|
|
||||||
) :
|
) :
|
||||||
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
|
private var defaultFocused = false
|
||||||
|
var defaultFocus: Int = -1
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
val cardView = object :
|
val cardView = object :
|
||||||
@@ -74,8 +75,14 @@ class CardAdapter(
|
|||||||
|
|
||||||
cardView.onFocusChangeListener = onFocusChangeListener
|
cardView.onFocusChangeListener = onFocusChangeListener
|
||||||
|
|
||||||
cardView.setOnKeyListener { v, keyCode, event ->
|
cardView.setOnClickListener { _ ->
|
||||||
listener?.onKey(keyCode)
|
listener?.onItemClicked(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
cardView.setOnKeyListener { _, keyCode, event: KeyEvent? ->
|
||||||
|
if (event?.action == KeyEvent.ACTION_DOWN) {
|
||||||
|
return@setOnKeyListener listener?.onKey(keyCode) ?: false
|
||||||
|
}
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +135,7 @@ class CardAdapter(
|
|||||||
interface ItemListener {
|
interface ItemListener {
|
||||||
fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean)
|
fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean)
|
||||||
fun onItemClicked(tvViewModel: TVViewModel)
|
fun onItemClicked(tvViewModel: TVViewModel)
|
||||||
fun onKey(keyCode: Int)
|
fun onKey(keyCode: Int): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setItemListener(listener: ItemListener) {
|
fun setItemListener(listener: ItemListener) {
|
||||||
|
|||||||
@@ -338,6 +338,7 @@ class MainActivity : FragmentActivity() {
|
|||||||
|
|
||||||
|
|
||||||
fun onKey(keyCode: Int): Boolean {
|
fun onKey(keyCode: Int): Boolean {
|
||||||
|
Log.i(TAG, "keyCode $keyCode")
|
||||||
when (keyCode) {
|
when (keyCode) {
|
||||||
KeyEvent.KEYCODE_0 -> {
|
KeyEvent.KEYCODE_0 -> {
|
||||||
showChannel("0")
|
showChannel("0")
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.os.Bundle
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.view.KeyEvent
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@@ -58,9 +59,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
sharedPref = (activity as? MainActivity)?.sharedPref!!
|
sharedPref = (activity as? MainActivity)?.sharedPref!!
|
||||||
|
|
||||||
itemPosition = sharedPref.getInt(POSITION, 0)
|
itemPosition = sharedPref.getInt(POSITION, 0)
|
||||||
if (itemPosition >= tvListViewModel.size()) {
|
|
||||||
itemPosition = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
view?.post {
|
view?.post {
|
||||||
val content = binding.content
|
val content = binding.content
|
||||||
@@ -85,7 +83,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
itemBinding.rowItems,
|
itemBinding.rowItems,
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
tvListViewModelCurrent,
|
tvListViewModelCurrent,
|
||||||
itemPosition
|
|
||||||
)
|
)
|
||||||
rowList.add(itemBinding.rowItems)
|
rowList.add(itemBinding.rowItems)
|
||||||
|
|
||||||
@@ -97,7 +94,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
itemBinding.rowItems.layoutManager =
|
itemBinding.rowItems.layoutManager =
|
||||||
GridLayoutManager(context, 6)
|
GridLayoutManager(context, 6)
|
||||||
itemBinding.rowItems.layoutParams.height =
|
itemBinding.rowItems.layoutParams.height =
|
||||||
dpToPx(100 * ((tvListViewModelCurrent.size() + 6 - 1) / 6))
|
dpToPx(92 * ((tvListViewModelCurrent.size() + 6 - 1) / 6))
|
||||||
|
|
||||||
itemBinding.rowItems.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
itemBinding.rowItems.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||||
@@ -106,22 +103,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
itemBinding.rowItems.setOnKeyListener { v, keyCode, event ->
|
|
||||||
Log.i(TAG, "itemBinding.rowItems.setOnKeyListener ")
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
itemBinding.row.setOnKeyListener { v, keyCode, event ->
|
|
||||||
Log.i(TAG, "itemBinding.row.setOnKeyListener ")
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
itemBinding.root.setOnKeyListener { v, keyCode, event ->
|
|
||||||
Log.i(TAG, "itemBinding.root.setOnKeyListener ")
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val itemDecoration = context?.let { GrayOverlayItemDecoration(it) }
|
val itemDecoration = context?.let { GrayOverlayItemDecoration(it) }
|
||||||
if (itemDecoration != null) {
|
if (itemDecoration != null) {
|
||||||
itemBinding.rowItems.addItemDecoration(itemDecoration)
|
itemBinding.rowItems.addItemDecoration(itemDecoration)
|
||||||
@@ -138,6 +119,18 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
mUpdateProgramRunnable = UpdateProgramRunnable()
|
mUpdateProgramRunnable = UpdateProgramRunnable()
|
||||||
handler.post(mUpdateProgramRunnable)
|
handler.post(mUpdateProgramRunnable)
|
||||||
|
|
||||||
|
if (itemPosition >= tvListViewModel.size()) {
|
||||||
|
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) { _ ->
|
||||||
@@ -192,10 +185,21 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onKey(keyCode: Int) {
|
override fun onKey(keyCode: Int): Boolean {
|
||||||
if (this.isHidden) {
|
if (this.isHidden) {
|
||||||
|
when (keyCode) {
|
||||||
|
KeyEvent.KEYCODE_DPAD_UP -> {
|
||||||
(activity as MainActivity).onKey(keyCode)
|
(activity as MainActivity).onKey(keyCode)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
KeyEvent.KEYCODE_DPAD_DOWN -> {
|
||||||
|
(activity as MainActivity).onKey(keyCode)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean) {
|
override fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean) {
|
||||||
@@ -342,7 +346,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
|
|||||||
putInt(POSITION, itemPosition)
|
putInt(POSITION, itemPosition)
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
Log.i(TAG, "$POSITION saved")
|
Log.i(TAG, "$POSITION $itemPosition saved")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
|||||||
@@ -334,7 +334,6 @@ class Request {
|
|||||||
Log.e(TAG, "info status error")
|
Log.e(TAG, "info status error")
|
||||||
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) {
|
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) {
|
||||||
tvModel.tokenRetryTimes++
|
tvModel.tokenRetryTimes++
|
||||||
if (needAuth)
|
|
||||||
fetchVideo(tvModel)
|
fetchVideo(tvModel)
|
||||||
} else {
|
} else {
|
||||||
if (!tvModel.getTV().mustToken) {
|
if (!tvModel.getTV().mustToken) {
|
||||||
|
|||||||
Reference in New Issue
Block a user