mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Added custom recycler divider, further changes to ViewHolders
This commit is contained in:
1 parent
1c6d22ccf9
commit
69b3e4f70b
14 files changed
+98
-89
No files matched your search
@@ -4,11 +4,9 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.recyclerview.widget.DividerItemDecoration
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.SharedViewModel
|
||||
@@ -16,6 +14,7 @@ import com.rtbishop.look4sat.data.SatEntry
|
||||
import com.rtbishop.look4sat.data.TleSource
|
||||
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
||||
import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
|
||||
import com.rtbishop.look4sat.utility.RecyclerDivider
|
||||
import com.rtbishop.look4sat.utility.Utilities.snack
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
||||
@@ -23,9 +22,9 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||
class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||
|
||||
private lateinit var binding: FragmentEntriesBinding
|
||||
private lateinit var entriesAdapter: EntriesAdapter
|
||||
private val viewModel: SharedViewModel by activityViewModels()
|
||||
private val pickFileReqCode = 100
|
||||
private val entriesAdapter = EntriesAdapter()
|
||||
private var tleSources = listOf<TleSource>()
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
@@ -36,17 +35,13 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||
}
|
||||
|
||||
private fun setupComponents() {
|
||||
entriesAdapter = EntriesAdapter()
|
||||
binding.apply {
|
||||
entriesRecycler.apply {
|
||||
val linearLayoutMgr = LinearLayoutManager(requireContext())
|
||||
val divider = DividerItemDecoration(requireContext(), linearLayoutMgr.orientation)
|
||||
val drawable = ResourcesCompat
|
||||
.getDrawable(resources, R.drawable.rec_entries_divider, requireActivity().theme)
|
||||
drawable?.let { divider.setDrawable(it) }
|
||||
layoutManager = linearLayoutMgr
|
||||
adapter = entriesAdapter
|
||||
addItemDecoration(divider)
|
||||
setHasFixedSize(true)
|
||||
adapter = entriesAdapter
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
addItemDecoration(RecyclerDivider(R.drawable.rec_divider_light))
|
||||
}
|
||||
importWeb.setOnClickListener { showImportFromWebDialog() }
|
||||
importFile.setOnClickListener { showImportFromFileDialog() }
|
||||
|
||||
@@ -22,10 +22,8 @@ package com.rtbishop.look4sat.ui.fragments
|
||||
import android.animation.ObjectAnimator
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.DividerItemDecoration
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import com.rtbishop.look4sat.R
|
||||
@@ -35,6 +33,7 @@ import com.rtbishop.look4sat.data.SatPass
|
||||
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||
import com.rtbishop.look4sat.ui.adapters.PassesAdapter
|
||||
import com.rtbishop.look4sat.utility.PrefsManager
|
||||
import com.rtbishop.look4sat.utility.RecyclerDivider
|
||||
import com.rtbishop.look4sat.utility.Utilities
|
||||
import com.rtbishop.look4sat.utility.Utilities.getRotationAnimator
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
@@ -78,17 +77,12 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
passesAdapter = PassesAdapter(requireContext(), prefsManager.shouldUseUTC())
|
||||
binding.apply {
|
||||
passesRecycler.apply {
|
||||
val linearLayoutMgr = LinearLayoutManager(requireContext())
|
||||
val divider = DividerItemDecoration(requireContext(), linearLayoutMgr.orientation)
|
||||
val drawable = ResourcesCompat
|
||||
.getDrawable(resources, R.drawable.rec_passes_divider, requireActivity().theme)
|
||||
drawable?.let { divider.setDrawable(it) }
|
||||
layoutManager = linearLayoutMgr
|
||||
setHasFixedSize(true)
|
||||
adapter = passesAdapter
|
||||
isVerticalScrollBarEnabled = false
|
||||
layoutManager = LinearLayoutManager(context)
|
||||
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
||||
addItemDecoration(divider)
|
||||
setHasFixedSize(true)
|
||||
addItemDecoration(RecyclerDivider(R.drawable.rec_divider_dark))
|
||||
}
|
||||
animator = passesFab.getRotationAnimator()
|
||||
passesFab.setOnClickListener {
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.rtbishop.look4sat.utility
|
||||
|
||||
import android.graphics.Canvas
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
class RecyclerDivider(private val resId: Int) : RecyclerView.ItemDecoration() {
|
||||
|
||||
override fun onDrawOver(c: Canvas, parent: RecyclerView) {
|
||||
val divider = ContextCompat.getDrawable(parent.context, resId)!!
|
||||
val left = parent.paddingLeft
|
||||
val right = parent.width - parent.paddingRight
|
||||
parent.adapter?.itemCount?.let { childCount ->
|
||||
for (i in 0 until childCount) {
|
||||
if (i == (childCount - 1)) continue
|
||||
parent.getChildAt(i)?.let {
|
||||
val params = it.layoutParams as RecyclerView.LayoutParams
|
||||
val top = it.bottom + params.bottomMargin
|
||||
val bottom = top + divider.intrinsicHeight
|
||||
divider.setBounds(left, top, right, bottom)
|
||||
divider.draw(c)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/themeLight" android:state_selected="true" />
|
||||
<item android:color="@color/greyLight" android:state_selected="false" />
|
||||
</selector>
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<size
|
||||
android:width="1dp"
|
||||
android:height="2dp" />
|
||||
<solid android:color="#121212" />
|
||||
<solid android:color="@color/greyDark" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<size
|
||||
android:width="1dp"
|
||||
android:height="0.5dp" />
|
||||
<solid android:color="#808080" />
|
||||
<solid android:color="@color/greyDivider" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -21,8 +21,6 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
app:elevation="1dp"
|
||||
app:itemIconTint="@color/nav_bottom_item"
|
||||
app:itemTextColor="@color/nav_bottom_item"
|
||||
app:labelVisibilityMode="labeled"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
@@ -51,14 +51,39 @@
|
||||
app:layout_constraintStart_toStartOf="@id/passes_bar"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:elevation="4dp"
|
||||
android:fontFamily="@font/digital_dismay"
|
||||
android:text="@string/timer_placeholder"
|
||||
android:textColor="@color/themeLight"
|
||||
android:textSize="48sp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/passes_timer"
|
||||
app:layout_constraintEnd_toStartOf="@+id/passes_timer"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/passes_timer" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:elevation="4dp"
|
||||
android:fontFamily="@font/digital_dismay"
|
||||
android:text="@string/timer_placeholder"
|
||||
android:textColor="@color/themeLight"
|
||||
android:textSize="48sp"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/passes_timer"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/passes_timer"
|
||||
app:layout_constraintTop_toTopOf="@+id/passes_timer" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/passes_recycler"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="2dp"
|
||||
android:layout_marginTop="2dp"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:padding="2dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
||||
@@ -22,11 +22,7 @@
|
||||
android:id="@+id/pass_geo_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_marginTop="2dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
app:cardElevation="1dp">
|
||||
app:cardCornerRadius="0dp">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -38,70 +34,58 @@
|
||||
android:layout_height="0dp"
|
||||
android:contentDescription="@string/placeholder"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/card_pass_bg"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/pass_geo_img"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:contentDescription="@string/placeholder"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/pass_geo_name"
|
||||
app:layout_constraintStart_toStartOf="@+id/pass_geo_az"
|
||||
app:layout_constraintTop_toTopOf="@+id/pass_geo_name"
|
||||
app:srcCompat="@drawable/ic_pass_active" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/pass_geo_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/pass_satName"
|
||||
android:textColor="@color/themeLight"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_id"
|
||||
app:layout_constraintEnd_toStartOf="@+id/pass_geo_id"
|
||||
app:layout_constraintHorizontal_bias="0.02"
|
||||
app:layout_constraintStart_toEndOf="@+id/pass_geo_img" />
|
||||
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/pass_geo_id"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:text="@string/pass_satId"
|
||||
android:textColor="@color/themeLight"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pass_geo_el"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_name"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/pass_geo_name" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/pass_geo_az"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginTop="1dp"
|
||||
android:layout_marginBottom="3dp"
|
||||
android:text="@string/pat_azimuth"
|
||||
android:textSize="15sp"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_el"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/pass_geo_el"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
app:layout_constraintStart_toEndOf="@+id/pass_geo_bg"
|
||||
app:layout_constraintStart_toStartOf="@+id/pass_geo_name"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pass_geo_name" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/pass_geo_el"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:text="@string/pat_elevation"
|
||||
android:textSize="15sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/pass_geo_az"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pass_geo_id" />
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_az"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pass_geo_id"
|
||||
app:layout_constraintStart_toEndOf="@+id/pass_geo_az" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
@@ -22,7 +22,7 @@
|
||||
android:id="@+id/pass_leo_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardCornerRadius="4dp">
|
||||
app:cardCornerRadius="0dp">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -47,7 +47,6 @@
|
||||
android:text="@string/pass_los_az"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_leo_aosAz"
|
||||
app:layout_constraintEnd_toEndOf="@+id/pass_leo_satId"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/pass_leo_aosAz" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
@@ -56,7 +55,6 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:text="@string/pass_satId"
|
||||
android:textSize="15sp"
|
||||
android:textColor="@color/themeLight"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/pass_leo_satName"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
@@ -75,8 +73,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginTop="2dp"
|
||||
android:textSize="15sp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:text="@string/pass_satName"
|
||||
android:textColor="@color/themeLight"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
@@ -86,9 +83,9 @@
|
||||
android:id="@+id/pass_leo_aosAz"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="1dp"
|
||||
android:text="@string/pass_aos_az"
|
||||
app:layout_constraintEnd_toStartOf="@+id/pass_leo_losAz"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||
app:layout_constraintStart_toStartOf="@+id/pass_leo_satName"
|
||||
app:layout_constraintTop_toBottomOf="@+id/pass_leo_satName" />
|
||||
|
||||
@@ -20,11 +20,12 @@
|
||||
<com.google.android.material.checkbox.MaterialCheckBox xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/sat_entry_checkbox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="34dp"
|
||||
android:layout_height="32dp"
|
||||
android:background="@null"
|
||||
android:button="@null"
|
||||
android:drawableEnd="?android:attr/listChoiceIndicatorMultiple"
|
||||
android:paddingStart="24dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:text="@string/placeholder"
|
||||
android:textSize="17sp" />
|
||||
android:textColor="@color/greyLight"
|
||||
android:textSize="16sp" />
|
||||
@@ -20,8 +20,10 @@
|
||||
<resources>
|
||||
<!-- theme colors -->
|
||||
<color name="themeLight">#FFE082</color>
|
||||
<color name="themeDark">#FFCA28</color>
|
||||
<color name="greyDark">#121212</color>
|
||||
<color name="greyLight">#E0E0E0</color>
|
||||
<color name="greyLight">#C0C0C0</color>
|
||||
<color name="greyDivider">#808080</color>
|
||||
<color name="greySurface">#1d1d1d</color>
|
||||
<!-- map colors -->
|
||||
<color name="satTrack">#B00020</color>
|
||||
|
||||
@@ -128,4 +128,5 @@
|
||||
<string name="osmCopyright" translatable="false">Wikimedia maps | Map data © OpenStreetMap contributors</string>
|
||||
<string name="sat_import">Import satellite data</string>
|
||||
<string name="timer_zero" translatable="false">00:00:00</string>
|
||||
<string name="timer_placeholder" translatable="false">-</string>
|
||||
</resources>
|
||||
@@ -21,17 +21,8 @@
|
||||
|
||||
<style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
|
||||
<item name="colorPrimary">@color/themeLight</item>
|
||||
<item name="colorOnPrimary">@color/greyDark</item>
|
||||
|
||||
<item name="colorSecondary">@color/themeLight</item>
|
||||
<item name="colorOnSecondary">@color/greyDark</item>
|
||||
|
||||
<item name="colorSurface">@color/greyDark</item>
|
||||
<item name="colorOnSurface">@color/greyLight</item>
|
||||
|
||||
<item name="android:colorBackground">@color/greyDark</item>
|
||||
<item name="colorOnBackground">@color/greyLight</item>
|
||||
|
||||
<item name="colorPrimaryVariant">@color/themeDark</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
</style>
|
||||
|
||||
|
||||
Reference in new issue
Block a user