From 10f261be8bf5447f06a260304e883e6cdddc8b93 Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Wed, 21 Feb 2024 21:57:05 +0800 Subject: [PATCH] fix save state --- .../java/com/lizongying/mytv/CardAdapter.kt | 15 ++++-- .../java/com/lizongying/mytv/MainActivity.kt | 1 + .../java/com/lizongying/mytv/MainFragment.kt | 52 ++++++++++--------- .../main/java/com/lizongying/mytv/Request.kt | 1 - 4 files changed, 40 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/lizongying/mytv/CardAdapter.kt b/app/src/main/java/com/lizongying/mytv/CardAdapter.kt index 5a8de6c..6b59017 100644 --- a/app/src/main/java/com/lizongying/mytv/CardAdapter.kt +++ b/app/src/main/java/com/lizongying/mytv/CardAdapter.kt @@ -2,6 +2,7 @@ package com.lizongying.mytv import android.graphics.Color import android.view.ContextThemeWrapper +import android.view.KeyEvent import android.view.View import android.view.ViewGroup import android.view.animation.ScaleAnimation @@ -18,13 +19,13 @@ class CardAdapter( private val recyclerView: RecyclerView, private val owner: LifecycleOwner, private var tvListViewModel: TVListViewModel, - var defaultFocus: Int, ) : RecyclerView.Adapter() { private var listener: ItemListener? = null private var focused: View? = null private var defaultFocused = false + var defaultFocus: Int = -1 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val cardView = object : @@ -74,8 +75,14 @@ class CardAdapter( cardView.onFocusChangeListener = onFocusChangeListener - cardView.setOnKeyListener { v, keyCode, event -> - listener?.onKey(keyCode) + cardView.setOnClickListener { _ -> + listener?.onItemClicked(item) + } + + cardView.setOnKeyListener { _, keyCode, event: KeyEvent? -> + if (event?.action == KeyEvent.ACTION_DOWN) { + return@setOnKeyListener listener?.onKey(keyCode) ?: false + } false } @@ -128,7 +135,7 @@ class CardAdapter( interface ItemListener { fun onItemFocusChange(tvViewModel: TVViewModel, hasFocus: Boolean) fun onItemClicked(tvViewModel: TVViewModel) - fun onKey(keyCode: Int) + fun onKey(keyCode: Int): Boolean } fun setItemListener(listener: ItemListener) { diff --git a/app/src/main/java/com/lizongying/mytv/MainActivity.kt b/app/src/main/java/com/lizongying/mytv/MainActivity.kt index 7864c40..e717554 100644 --- a/app/src/main/java/com/lizongying/mytv/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv/MainActivity.kt @@ -338,6 +338,7 @@ class MainActivity : FragmentActivity() { fun onKey(keyCode: Int): Boolean { + Log.i(TAG, "keyCode $keyCode") when (keyCode) { KeyEvent.KEYCODE_0 -> { showChannel("0") diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index 2277605..f5dd8b0 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.os.Handler import android.os.Looper import android.util.Log +import android.view.KeyEvent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -58,9 +59,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { sharedPref = (activity as? MainActivity)?.sharedPref!! itemPosition = sharedPref.getInt(POSITION, 0) - if (itemPosition >= tvListViewModel.size()) { - itemPosition = 0 - } view?.post { val content = binding.content @@ -85,7 +83,6 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { itemBinding.rowItems, viewLifecycleOwner, tvListViewModelCurrent, - itemPosition ) rowList.add(itemBinding.rowItems) @@ -97,7 +94,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { itemBinding.rowItems.layoutManager = GridLayoutManager(context, 6) itemBinding.rowItems.layoutParams.height = - dpToPx(100 * ((tvListViewModelCurrent.size() + 6 - 1) / 6)) + dpToPx(92 * ((tvListViewModelCurrent.size() + 6 - 1) / 6)) itemBinding.rowItems.addOnScrollListener(object : RecyclerView.OnScrollListener() { 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) } if (itemDecoration != null) { itemBinding.rowItems.addItemDecoration(itemDecoration) @@ -138,6 +119,18 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { mUpdateProgramRunnable = UpdateProgramRunnable() 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.tvListViewModel.value?.forEach { tvViewModel -> tvViewModel.errInfo.observe(viewLifecycleOwner) { _ -> @@ -192,10 +185,21 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { super.onViewCreated(view, savedInstanceState) } - override fun onKey(keyCode: Int) { + override fun onKey(keyCode: Int): Boolean { if (this.isHidden) { - (activity as MainActivity).onKey(keyCode) + when (keyCode) { + KeyEvent.KEYCODE_DPAD_UP -> { + (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) { @@ -342,7 +346,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { putInt(POSITION, itemPosition) apply() } - Log.i(TAG, "$POSITION saved") + Log.i(TAG, "$POSITION $itemPosition saved") } override fun onDestroy() { diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index 47aa43b..6bceea9 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -334,7 +334,6 @@ class Request { Log.e(TAG, "info status error") if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { tvModel.tokenRetryTimes++ - if (needAuth) fetchVideo(tvModel) } else { if (!tvModel.getTV().mustToken) {