diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt index 95048f33..5952df4b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt @@ -25,14 +25,14 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.rtbishop.look4sat.R +import com.rtbishop.look4sat.data.SatPass import com.rtbishop.look4sat.data.SatTrans import com.rtbishop.look4sat.databinding.ItemTransBinding -import com.rtbishop.look4sat.utility.PassPredictor import java.util.* -class TransAdapter(context: Context) : RecyclerView.Adapter() { +class TransAdapter(context: Context, private val satPass: SatPass) : + RecyclerView.Adapter() { - private lateinit var predictor: PassPredictor private val divider = 1000000f private val strNo = context.getString(R.string.btn_no) private val strYes = context.getString(R.string.btn_yes) @@ -40,17 +40,25 @@ class TransAdapter(context: Context) : RecyclerView.Adapter() - fun setPredictor(predictor: PassPredictor) { - this.predictor = predictor - } - - fun setList(list: List) { + fun setData(list: List) { transmittersList = list notifyDataSetChanged() } + fun tickTransmitters() { + if (!satPass.tle.isDeepspace and satPass.active) { + val iterator = transmittersList.listIterator() + while (iterator.hasNext()) { + val trans = iterator.next() + val index = transmittersList.indexOf(trans) + notifyItemChanged(index) + } + } + } + override fun getItemCount(): Int { return transmittersList.size } @@ -69,9 +77,33 @@ class TransAdapter(context: Context) : RecyclerView.Adapter + if (entries.isNullOrEmpty()) setError() else { - viewModel.setEntries(it) - entriesAdapter.setEntries(it as MutableList) + viewModel.setEntries(entries) + entriesAdapter.setEntries(entries as MutableList) setLoaded() } + observeEvents() }) + } + + private fun observeEvents() { viewModel.getAppEvent().observe(viewLifecycleOwner, { event -> event.getContentIfNotHandled()?.let { if (it == 0) setLoading() diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt index 258153ea..bb835c51 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PolarFragment.kt @@ -30,6 +30,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.SimpleItemAnimator import com.rtbishop.look4sat.R import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.data.Result @@ -63,14 +64,6 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { super.onViewCreated(view, savedInstanceState) binding = FragmentPolarBinding.bind(view) sensorManager = requireContext().getSystemService(Context.SENSOR_SERVICE) as SensorManager - transmitterAdapter = TransAdapter(requireContext()) - binding.recycler.apply { - setHasFixedSize(true) - adapter = transmitterAdapter - isVerticalScrollBarEnabled = false - layoutManager = LinearLayoutManager(context) - addItemDecoration(RecyclerDivider(R.drawable.rec_divider_dark)) - } magneticDeclination = prefsManager.getMagDeclination() observePasses() } @@ -114,22 +107,30 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { polarView = PolarView(requireContext(), satPass) binding.frame.addView(polarView) observeTransmitters() - observeTimer() } }) } private fun observeTransmitters() { - viewModel.getTransmittersForSat(satPass.tle.catnum).observe(viewLifecycleOwner, { - if (it.isNotEmpty()) { - transmitterAdapter.setPredictor(satPass.predictor) - transmitterAdapter.setList(it) - binding.recycler.visibility = View.VISIBLE + viewModel.getTransmittersForSat(satPass.tle.catnum).observe(viewLifecycleOwner, { list -> + transmitterAdapter = TransAdapter(requireContext(), satPass) + if (list.isNotEmpty()) { + transmitterAdapter.setData(list) + binding.recycler.apply { + setHasFixedSize(true) + adapter = transmitterAdapter + isVerticalScrollBarEnabled = false + layoutManager = LinearLayoutManager(context) + (itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false + addItemDecoration(RecyclerDivider(R.drawable.rec_divider_dark)) + visibility = View.VISIBLE + } binding.noTransMsg.visibility = View.INVISIBLE } else { binding.recycler.visibility = View.INVISIBLE binding.noTransMsg.visibility = View.VISIBLE } + observeTimer() }) } @@ -137,7 +138,7 @@ class PolarFragment : Fragment(R.layout.fragment_polar), SensorEventListener { viewModel.getAppTimer().observe(viewLifecycleOwner, { setPassText(it) polarView?.invalidate() - transmitterAdapter.notifyDataSetChanged() + transmitterAdapter.tickTransmitters() }) } diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt b/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt index 77d4d6be..df41f491 100644 --- a/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt @@ -10,7 +10,7 @@ object Utilities { fun formatForTimer(millis: Long): String { val format = "%02d:%02d:%02d" - val hours = TimeUnit.MILLISECONDS.toHours(millis) % 60 + val hours = TimeUnit.MILLISECONDS.toHours(millis) val minutes = TimeUnit.MILLISECONDS.toMinutes(millis) % 60 val seconds = TimeUnit.MILLISECONDS.toSeconds(millis) % 60 return String.format(format, hours, minutes, seconds) diff --git a/app/src/main/res/layout/item_trans.xml b/app/src/main/res/layout/item_trans.xml index 52330f84..2f88b245 100644 --- a/app/src/main/res/layout/item_trans.xml +++ b/app/src/main/res/layout/item_trans.xml @@ -38,6 +38,7 @@ android:gravity="center" android:maxLines="1" android:text="@string/trans_description" + android:textSize="16sp" app:layout_constraintEnd_toStartOf="@+id/img_uplink" app:layout_constraintHorizontal_chainStyle="spread_inside" app:layout_constraintStart_toEndOf="@+id/img_downlink" @@ -76,6 +77,7 @@ android:layout_marginTop="4dp" android:layout_marginBottom="2dp" android:text="@string/trans_mode" + android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/isInverted" app:layout_constraintHorizontal_chainStyle="spread_inside" @@ -88,6 +90,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="6dp" android:text="@string/trans_inverted" + android:textSize="16sp" app:layout_constraintBaseline_toBaselineOf="@+id/mode" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/mode" /> @@ -97,25 +100,23 @@ android:layout_width="18dp" android:layout_height="18dp" android:layout_marginStart="4dp" - android:layout_marginTop="4dp" android:contentDescription="@string/placeholder" android:rotation="90" app:layout_constraintBottom_toBottomOf="@+id/description" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" + app:layout_constraintTop_toTopOf="@+id/description" app:srcCompat="@drawable/ic_arrow" />